我目前的项目前端使用的是jsf+seam的架构,目前项目已经进入尾声,我想把一些心得体会给大家说说,以便大家在使用jsf的时候,少走弯路。
1.异常处理问题:请为jsf加入seam框架,看看Seam - 无缝集成JSF,共三部分,里面告诉了你怎么在servlet容器下配合spring使用seam,seam不是一定要在ejb3和jboss下才可以使用。因为单独使用jsf的话她的异常处理功能很简陋,跟踪不到你想看的地方,对于开发很不方便,你只有打开日志才能看到问题所在,而seam在加入 phase-listener以后,对jsf不同的生命周期都进行了功能增强,即使不使用seam任何的功能,她也能毫无保留的输出所有的异常栈。
2.css问题:如果你想在你的项目中使用jsf,css太重要了,很多刚开始使用jsf的人都不是很习惯jsf基于块结构开发页面,因为jsf让你注意的是内容展现的结构,而不是内容展现的样式,这是完全符合w3开发html的初衷,大家使用<table><tr>< td>来做页面展现布局,其实是错误已久的方法,如果在jsf中能了解如何使用css进行布局,jsf不适合复杂页面设计这句话就不攻自破了。
3.细心的使用dataTable组件,数据列表是最常用的页面组件,但是我毫不留情的说jsf的dataTable组件的实现简直太滥了,它就是jsf 开发一大祸根。没有很方便的解决特定行样式显示的问题,没有解决回退按钮风险问题,没有dataScroll和dataTable组件进行数据库分页的优雅办法,数据提交的幻影问题,我的开发很多时间用在了dataTable的和其他组件块融合上面。不过jsf1.2通过统一el,加入了对jstl的 foreach标记的支持,我虽然还没有使用,但是我认为这有可能成为数据列表开发的一个有力补充。
4.建议把jsf的模型bean和后台的业务bean合二为一,这样可以在前端提交页面与模型绑定的同时,完成业务bean的数据封装,并且交由服务层处理一气呵成。这样做有个好处,就是我们会想方设法通过各种手段在第一时间就完成模型bean对业务bean的封装,消除服务层对dto的依赖。这样是可行的,因为jsf的页面绑定机制提供了很好的帮助。
5.请考虑多的使用convert组件,比如列表页面有个radio块,提交radio值就是一个int数值,然后在展现逻辑去恢复这个radio值对应的业务模型,这样增加了展现逻辑处理页面数据的负担,而且不好管理,如果把这个工作放在自定义的convert中,让convert在页面上显示int数值,在提交上寻找对象,那么页面和服务层就屏蔽了这样的工作,看到的都是对象的进出。
6.我使用了myfaces一个自己的组件<t:updateListener>,就是跨页面专递参数,非常好用,刚使用jsf的朋友,可以看到跳转的下一个页面用它怎么做,但是建议传递模型对象,不要传递数值,你使用jsf就是因为她是基于对象考虑页面设计的。
7.小心使用session来处理jsf,jsf过多的使用了session,但是我可以肯定一点,展现层一定是需要基于状态的方式来做的,这样可以简化开发,无状态的方式会带来更多的无序代码。不是每个人都是高手。可以考虑使用seam的conversation来处理,她的长会话特别适合业务编辑,默认的短会话会填补jsf有时容易丢失的短期数据。
8.调试jsf的问题:有时你使用jsf想知道你的数据在哪个阶段变化了,你不会把jsf代码加入到自己的工程中来调试把,请加入自定义的phaseListener,继承phaseListener这个接口,你可以在把你的程序设置在任何阶段跳出来进行调试。
9.分页的问题:在google搜一下,有个http://www.blogjava.net/steady/archive/2005/12/30/26013.aspx提供了分页的方式,我就在使用,这是目前最可能的方式了把,呵呵,不过要注意她使dataTable的values直接使用了dataModel,她与seam的@dataModel是不兼容的,所以不能使用seam的@dataModel功能,需要使用get方式了。
10.如果想使用ajax4jsf等ajax框架,你需要使用facelet,让页面成为标准的xhtml,记好了,不要写了一大堆才发现这个问题。
11.如果你在dataTable列表页面使用了radio的话,你还想在列表上做一些link操作,一定要在操作上加入immediate= true,否则在没有选择radio的情况下她是不会让你过去的。并且列表中要使用selectBooleanRadio,而不是 selectOneRadio或者selectManyRadio。checkbox也是一样。
12.对于doGet的方式请使用seam的<s:link>组件。
13.如果你导入了其他页面,而没有使用facelet的话,那么导入的那个页面就要完全符合jsf组件的渲染方式,混合html会解析不出来。反过来在主页面应该尽量多使用jsf标记与html混合的方式,这样可以使开发变得简单,尽管有时候jsf会很丢丑,你试试每个html组件都有个 render属性就知道了。jsf1.2已经把混合的html作为一个output组件来输出,可以和jsf组件兼容,是件好事。对于混合html这种方式,我想说你关注的是jsf组件和模型的关系,而不一定页面都得是jsf组件标记。
14.不要相信jsf运行的速度慢,jsf虽然在树形组件处理上,每一个阶段都经历了递归遍历,但是要相信jsf依然很快,我现在的系统很快,如果你使用后很慢那是项目产生了问题,而不是框架的产生了问题。
15.相信jsf一定是下一代表现层的王者,这很重要。
分享到:
相关推荐
开发者可以定义Bean的属性、方法,并通过EL在Facelets视图中使用。 6. **生命周期**:JSF有七个阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用、渲染响应和结束请求。每个阶段都有特定的任务,...
通过以上步骤,初学者可以逐步掌握在NetBeans中使用JSF开发Web应用的基本流程。同时,随着经验的积累,还可以深入学习更多高级特性,如自定义组件、过滤器、监听器以及与EJB、JPA等其他Java EE技术的集成,以构建更...
总的来说,JSF中文帮助文档涵盖了JSF框架的所有关键概念和技术,包括API详解、生命周期、组件使用、数据绑定、验证、导航等,对于希望在Java Web开发中使用JSF的开发者来说,是极具价值的学习资源。通过阅读和实践,...
这个“VisualWebJSF架构使用教程”压缩包文件包含了关于如何使用该框架的详细指导,旨在帮助初学者和有经验的开发者更好地理解和运用VisualWebJSF。 首先,我们要了解JSF是什么。JavaServer Faces(JSF)是Java平台...
- 创建Spring Bean:定义需要在JSF中使用的业务逻辑和服务层Bean,并使用Spring的注解(如`@Component`、`@Service`)或XML配置来管理它们。 - 配置JSF:在JSF的配置文件中(如`faces-config.xml`)声明Spring的EL...
开发者可以学习如何在JSF中使用这些服务,进行数据持久化、事务管理等操作。 在性能优化和调试方面,JSF实战也会提供实用的技巧和建议,如缓存管理、错误处理、性能监控等,帮助开发者构建高效且稳定的JSF应用。 ...
以上这些问题和解决方案都是在实践中积累的经验,对于CDI+JSF2.0项目在WebSphere 8.5环境下的部署和运行至关重要。理解和解决这些问题有助于提高应用的稳定性和用户体验。在实际开发中,应持续关注官方文档、社区...
总的来说,这个"完整的jsf博客源代码"实例不仅涵盖了JSF的基础知识,也包含了数据库集成和项目构建的实际经验,是提升Java Web开发技能的理想资源。通过实践,你可以深入理解JSF框架的工作原理,同时掌握数据库应用...
通过这个简单的"HelloJsf"实例,你将能够掌握JSF的基础知识,包括组件的使用、Managed Beans的配置、视图的创建以及如何在实际环境中部署和运行JSF应用。随着经验的积累,你可以尝试更复杂的JSF应用场景,如数据绑定...
在提供的源码实例中,你可以看到这些概念如何在实际项目中应用。通过分析和运行这些代码,你将能更好地理解JSF框架的工作方式,学习如何创建、配置和使用JSF组件,以及如何处理用户交互和业务逻辑。这些实例对于初学...
**JSF 1.2 源代码详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,它提供了一种组件化...这不仅对于JSF初学者是一份宝贵的参考资料,对于有经验的开发者来说,也是深入理解框架内部运作的捷径。
2. **HTML标签**:JSF提供了对HTML5标签的支持,如`<h:outputLabel>`、`<h:outputLink>`等,使得开发者可以在JSF应用中使用标准的HTML语法。 3. **自定义标签**:通过创建`FacesComponent`或使用第三方库如ICEfaces...
**JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。...对于初学者,这是一个很好的实践项目,而对于有经验的开发者,它可以作为一个参考来了解JSF组件的使用和数据库集成。
- **兼容性与互操作性**:尽管JSF和Struts有着各自的特点,但它们之间是兼容的,可以协同工作,这意味着开发者可以在一个项目中同时利用这两种框架的优点。 #### 三、JSF生命周期 - **生命周期概述**:JSF的生命...
在本项目中,可能使用JPA来持久化学生数据,使用CDI来注入依赖,使用EJB来实现业务服务。 通过这个"JSF开发-学生信息管理系统"的学习,你可以全面掌握JSF的基本概念和实践技巧,了解如何将这些技术应用于实际项目,...
在实际项目中,JSF常用于构建企业级应用,例如,员工管理系统、电子商务平台等。通过学习JSF,开发者可以快速构建出功能丰富的Web界面,同时得益于其强大的组件库和MVC架构,使得代码维护变得更加简单。 通过阅读...