我目前的项目前端使用的是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的情况下她是不会让你过去的。并且列表中要使用selectOneRadio,如果使用checkbox就要使用selectBooleanCheckbox.组件。
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一定是下一代表现层的王者,这很重要。
就这么多把,jsf的能多经验,我还在摸索当中,有机会还会和大家交流
fangshun1980@hotmail.com
分享到:
相关推荐
3. **FacesContext与ApplicationContext**:在JSF中获取Spring的ApplicationContext,以便于在JSF的生命周期中使用Spring服务。 4. **安全整合**:如Spring Security可以与JSF集成,提供用户认证和授权功能。 5. **...
在这个“jsf需要全部包”的压缩包中,通常会包含JSF开发所需的各个核心组件、库和其他辅助工具。下面我们将详细探讨JSF框架及其相关组件和开发包。 1. **JSF框架基础**: - JSF是一种Model-View-Controller (MVC)...
**JSF 2.0(JavaServer Faces 2.0)**是Java平台上的一种服务器端的用户界面框架,用于构建富互联网应用程序(Rich Internet ...在实际项目中,确保使用稳定版本的Mojarra,可以有效提高项目的可靠性和稳定性。
受管Bean是JSF中管理的对象,它们的生命周期由JSF管理,可以在视图之间共享数据。 4. **faces-config.xml**: - 这是JSF应用的主要配置文件,用于定义导航规则。在这个例子中,`verify`方法的返回值("success"或...
2. **项目创建**:使用IDE(如Eclipse或NetBeans)创建一个新的JSF项目。 3. **页面设计**:使用JSF提供的HTML-like标签语言编写页面,如`<h:inputText>`、`<h:commandButton>`等。 4. **后端Bean创建**:创建...
PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,主要应用于Web开发,可以嵌入到HTML中使用。PHP环境通常包括PHP解析器、Web服务器(如Apache或Nginx)、数据库管理系统(如MySQL或PostgreSQL)以及一...
**JSF编程详解** ...同时,了解源码和工具标签的含义,意味着在学习过程中,可能会涉及JSF相关库的源代码分析以及使用各种开发工具(如Eclipse, NetBeans, IntelliJ IDEA等)进行JSF项目的开发和调试。
【标题】"jsf-spring-boot-starter-2.2.6.zip" 是一个基于Java Server Faces (JSF)和Spring Boot的开源项目启动器,版本号为2.2.6。JSF是一种用于构建Web应用程序的Java EE框架,它提供了一种组件化的视图层模型,...
文档中提到,作者已经将所需的jar包上传到CSDN共享,供开发者下载使用。 在`web.xml`中,需要配置几个关键的元素来启用JSF、Spring和Facelets(JSF的视图渲染技术)的支持。例如,`ContextLoaderListener`启动...
通过学习这些资源,开发者能够深入理解JSF的工作机制,掌握如何构建基于JSF的Web应用,并提升在实际项目中的应用能力。同时,书中可能还涉及到了如何使用工具(如IDE、构建工具等)来提高开发效率,以及如何阅读和...
- **Session Beans** (非标准JSF术语,但常被提及): 在整个会话中保持状态,可以跨多个请求共享数据。 ### 2.2 Beans的组态与设定 Managed Beans的属性可以在faces-config.xml中配置,包括初始化参数、作用域(如...
本项目为EducationResources-War项目,采用JSF架构设计,主要源码文件包括175个XHTML页面、145个Java类文件、39个JavaScript文件、30个CSS样式文件、27个JPG图片文件、26个GIF动画文件,以及少量其他类型的文件,...
【标签】"开源项目" 指出这两个压缩包中的内容都是开放源代码的,这意味着任何人都可以查看、使用、修改和分发这些代码,符合开源社区的精神。这对于开发者来说是一个巨大的优势,因为可以学习、借鉴甚至贡献代码,...
1. **复制jar包**:从你的项目中的`WEB-INF/lib`目录下,将所有与JSF2.0和PrimeFaces相关的jar文件复制到一个新的文件夹中。这些jar包可能包括但不限于jsf-api.jar、jsf-impl.jar、primefaces-x.x.x.jar等。 2. **...
通过JSF的EL(Expression Language)表达式,可以在页面中与后台Bean进行交互。 2. 模型(Model):模型由业务逻辑组成,通常是一个或多个JavaBean。这些Bean包含了应用的业务数据,并处理用户操作引发的业务逻辑。...
虽然不是直接与JSF相关的,但在企业级开发中,wiki系统常用于文档管理和团队协作。PmWiki是一个易于使用的开源wiki引擎,允许非程序员创建和编辑页面。 **8. 学习资源** 学习JSF,你可以参考Oracle官方文档、Maven...
JSF(JavaServer Faces)是Java平台上的一个用于构建用户界面的框架,它提供了一种声明式的方式来创建Web应用程序。...在实际项目中,我们需要根据需求和项目规模来合理选择和组合使用这些配置方式。
这两个组件在同一个项目中使用,可能因为它们在某些Web服务或数据处理场景中协同工作,比如在JSF应用程序中,使用Scala编写的UID生成器来创建唯一标识,以追踪用户交互或其他系统操作。不过,由于描述中提供的信息...