`

转贴:共享在项目中使用jsf的一些经验

    博客分类:
  • 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的初衷,大家使用< 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就是因为她是基于对象考虑页面设计的。</t:updatelistener>

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>组件。</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一定是下一代表现层的王者,这很重要。

转自:http://www.duduwolf.com/wiki/2007/541.html

 

分享到:
评论

相关推荐

    JSF 一些经验 .doc

    当在 `dataTable` 列表页面中使用 Radio Button 时,如果还想在列表上执行某些链接操作,则必须在链接操作上添加 `immediate="true"` 属性。这样做是为了防止在未选中 Radio Button 的情况下,用户尝试执行链接操作...

    jsf中文使用教程jsf中文使用教程

    5. **国际化支持**:JSF支持多语言,这在“JSF中文使用教程”中可能包含如何设置和使用中文资源的内容。 **学习JSF的关键概念**: 1. **Facelet**:Facelets是JSF的默认视图技术,用于创建和组织用户界面组件。 2. ...

    IDEA创建JSF项目所需jar包.zip

    - @Named注解:标记一个bean,使其可在EL表达式中使用。 - @Qualifier注解:用于更精确地指定注入的bean类型。 在IDEA中创建JSF项目,你需要以下步骤: 1. 安装JSF插件:打开IDEA,进入设置(Preferences),...

    JSF学习,JSF标签使用

    JSF的学习入门知识教程,里面有例子还有各个标签的使用及属性介绍

    JSF框架的demo项目

    在本demo项目中,你可能发现使用了`&lt;h:inputText&gt;`,`&lt;h:commandButton&gt;`等标签,这些都是JSF提供的一些基本组件。 **JSF的生命周期**是理解其工作原理的关键。当一个JSF页面被请求时,会经历六步:恢复视图、应用...

    经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part2

    经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part2

    经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part3

    经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part3

    jspADD添加JSF项目实例

    在这个名为"jspADD添加JSF项目实例"的教程中,我们将深入探讨如何将JSF集成到一个现有的JSP(JavaServer Pages)项目中,以及如何利用JSF的优势来创建功能丰富的Web应用程序。 首先,JSF的核心概念是**组件模型**。...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    内容简介 《经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。

    MyEclipse2014搭建JSF项目实例源码

    在本实例中,我们将深入探讨如何使用 **MyEclipse 2014** 这款强大的Java开发工具来搭建一个JSF项目。 首先,了解 **MyEclipse**。这是一款集成开发环境(IDE),特别适合Java EE项目的开发,包括但不限于Servlet、...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    2. **JSF标签**:JSF的UI组件是以标签的形式在JSP页面中使用的,这些标签对应于服务器端的组件。学习JSF标签,你需要理解每个标签的用途,如`h:inputText`用于文本输入,`h:commandButton`用于触发动作,以及如何...

    JSF中文教程.zip

    开发者可以定义Bean的属性、方法,并通过EL在Facelets视图中使用。 6. **生命周期**:JSF有七个阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用、渲染响应和结束请求。每个阶段都有特定的任务,...

    JSF中文教程jsf

    在JSF中,**组件** 是UI的基础元素,如按钮、文本输入框等。这些组件可以通过XML(Facelets)或JSP页面进行声明,并且可以组合成更复杂的视图结构。**Facelets** 是JSF推荐的视图定义语言,它比JSP更强大,更易于...

    使用NetBeans进行基础JSF开发

    通过以上步骤,初学者可以逐步掌握在NetBeans中使用JSF开发Web应用的基本流程。同时,随着经验的积累,还可以深入学习更多高级特性,如自定义组件、过滤器、监听器以及与EJB、JPA等其他Java EE技术的集成,以构建更...

    jsf第一个例子 jsf架包 jsf实例

    在Java项目中,我们需要把这些JAR添加到类路径中,或者如果使用的是现代的构建工具(如Maven或Gradle),则可以通过依赖管理来引入。 7. **jsf实例**:在实际应用中,JSF实例通常指的是一个运行时的JSF应用程序,它...

    ajax4jsf使用中文手册

    **Ajax4JSF** 是一个基于JavaServer Faces (JSF) 的 AJAX 扩展库,它使得在JSF应用中集成Ajax功能变得更加简单。这个框架的主要目标是...通过深入阅读提供的中文手册,可以进一步提升在实际项目中使用Ajax4JSF的能力。

    JSF与hibernate整合的登陆

    **JSF(JavaServer Faces)** 是Java平台上的一种用于构建用户界面的Web应用程序框架,它简化了开发人员创建和管理动态...通过这个项目,学习者可以深入理解JSF和Hibernate的工作原理,并提升自己在实际开发中的技能。

    JSF项目中seam的配置

    完成上述基础配置后,开发者就能在任何支持JSF的容器中使用Seam了。不过,Seam还提供了对Ajax和EJB 3的支持,需要根据项目需求进行额外的配置。 接下来,我们来看看Seam中常见的注解: 1. **@Name**:用于标识Seam...

Global site tag (gtag.js) - Google Analytics