转载自:http://ytrgmj.iteye.com/blog/1471360
以前有一个梦想,找个做前端开发的女朋友。这样她做前端开发,我做后台开发,双剑合并,行走江湖,天下无敌。
一个月前,看了组件库primefaces的demo,心里想,这下子咱么可以把前端妹子们抛弃了,单干也可以。demo的url见http://www.primefaces.org/showcase-labs/ui/home.jsf。
两周前,在公司接了一个小项目,就试验了一下primefaces和jsf,完了以后发现这玩意儿,其实跟妹子的性格很象——顺心的时候,绝对让你很爽,以前要写大量代码,现在一句话可以搞定。但是有各种小脾气,发作的时候,经常让人找不着北,跌进坑里爬不出来。下面列举一下我掉进去的各类坑,也给有兴趣用jsf和primefaces的同学提个醒。
坑一:输入检测错误后,按钮指定的action不运行。jsf在检测错误后,不会运行后续方法。你可以用process属性指定你要提交的panel或控件。如果不指定process,默认提交所有控件,这样会导致你用不到的控件输入值错。
坑二:commandLinK和commandButton被点击的时候,如果process的控件中,不包括@this(如果this不在提交的form中或者panel中),那么对应的action或者actionListener不会被执行。如果你只想提交某个input的值,那么你的控件的process属性应该这么写:process="inputId,@this"
坑三:如果commandLinK在datatable里面,那么update="table"是无效的,原因不知道。解决方法很简单,在table外面再套一个panel,每次更新那个panel。
坑四:jsf和spring结合后,datatable通过lazyload调用spring的bean,如果该bean的scope不是session,就会报错。原因不知,如果这个bean是配置在face——config文件中,又不会报错。可能是spring版本的问题。
坑五:jsf和spring节后后,通过元数据ManagedBean,无法被页面的el表达式引用,原因未知,可能是spring版本的问题。
坑六:错误复位。假设以下场景,有一个表格,显示某张数据库表的数据。表格的最后一列有一个“修改”按钮。每次点击“修改”,弹出一个窗口上面有各类控件显示对应行的数据。然后点击“保存”,提交到数据库中进行保存。点击另外一行的“修改”,会弹出窗口显示另外一行的数据。问题是,当我点击“保存”后,如果发生检测错误,再选择另外一行进行修改,弹窗控件中的数据不会被更新。这个坑我掉进去很久,查了不少资料才知道可以用primefaces-extendsions的resetEditableValues标签可以解决,在commandButton中加入<pe:resetEditableValues for=":form:updatePanel"/>就可以了。
坑七:scope设成session后会有脏数据的问题,可以通过指定属性的方法强行刷新。比如每次提交的时候,提交一个id为refresh的hidden控件,而在后台的java类中的setRefresh方法 中将脏数据刷新。
坑八:没有拦截器。struts2的拦截器功能强大,经常用它做事务管理、日志记录、异常处理。jsf中有类似的phaseListener,但是功能不够强大。幸亏spring有aop,可以弥补这个问题。jsf的phaseListener不能得到当前运行的managebean的实例,实际上也无法得到,因为jsf每次提交可能涉及多个managebean,不像struts2只会有一个action。
坑九:datatable中c:if无法使用,原因未知。
虽然使用primeface遇到了不少问题,也发了不少牢骚,但是我觉得jsf以后还是一个发展方向。各大java开源组织也推出了不少自己的jsf实现或者组件库,像apache有myface和对应的一套组件库、jboss有richfaces、金蝶有他的京剧脸谱。还有一个icefaces也蛮有名。但是我还是比较喜欢primefaces,控件多,效果漂亮,配置也简单,文档也很齐全。
用了primeface后,有些功能原来很复杂的,现在基本上一句话可以搞定。比如隔5秒刷新一个表格, <p:poll interval="5" process="@this" update=":form:tablePanel" />。用了jsf最大的好处是前后台交互变得很少,前台直接调用后台的函数,也可以直接取得后台数据。基本上我们不用写ajax获取后台数据什么的,javascript也写得很少,因为组件库各类效果都帮你实现了。更诱人的是,你可以根据jsf规范自定义组件,组件库没有帮你实现的,可以自己实现。
分享到:
相关推荐
JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结
#### 一、JSF概述与标签使用 JavaServer Faces(简称JSF)是一种基于Java EE的标准技术,它主要用于构建企业级Web应用。JSF提供了丰富的功能,包括表单处理、验证、国际化等,并通过一套强大的组件模型支持网页组件...
在开发Java EE应用程序时,尤其是使用CDI(Contexts and Dependency Injection)和JSF(JavaServer Faces)2.0版本的项目,可能会遇到各种兼容性问题。本文将针对在WebSphere 8.5环境下遇到的一些典型问题进行总结,...
本文将对JSF标签进行总结,并与HTML标签进行对比。 首先,JSF标签的使用需要导入相应的标签库,如在描述中所示,通常会引入`<%@ taglib ... %>`来引用JSF的核心库和HTML库。例如,`...
### JSF 使用经验总结 #### 一、异常处理与 Seam 集成 在使用 JavaServer Faces (JSF) 开发应用时,异常处理是非常重要的一个环节。原生的 JSF 异常处理机制较为简单,无法提供足够的信息来帮助开发者定位问题。...
JavaServer Faces (JSF) 是一个用于构建用户界面的Java Web...总结来说,JSF通过其组件化、事件驱动的架构,为开发人员提供了强大的工具,简化了Web应用的构建,同时也提供了一种灵活的方式来处理用户交互和业务逻辑。
1. **组件模型**:JSF的核心是其组件模型,允许开发者使用预定义的UI组件(如按钮、文本框等)来构建页面。这些组件可以嵌套、组合,形成复杂的用户界面。每个组件都有自己的属性和行为,可以通过XML配置或Java代码...
总结:《JSF实战》一书全面覆盖了JSF技术的各个方面,从基础概念到高级特性的应用,旨在帮助读者快速掌握并熟练运用JSF进行Web开发。通过阅读本书,开发者不仅可以了解到JSF的基本原理,还能通过实战练习提升实际...
总结来看,JSF更倾向于面向组件的编程方式,使得Web界面的设计更加直观和组件化;而Struts则更偏重于传统的MVC模式,通过Action类来处理用户请求,虽然功能强大,但其灵活性相对较弱。尽管JSF的使用范围没有Struts...
总结来说,这个例子涵盖了JSF的基本用法,包括Bean的创建、验证逻辑的实现、导航规则的配置,以及JSF与Tiles的初步集成。对于初学者,这是一个很好的起点,能帮助理解JSF如何处理用户交互、管理页面流程,以及如何与...
京东JSF(杰夫服务框架)是一款由京东自主研发的中间件产品,旨在解决大规模分布式系统中的服务治理和服务通信问题。随着业务规模的增长和技术发展的需求,京东原有的服务架构逐渐显露出不足之处,包括系统耦合度过...
- **简介**:JSF通过解决Web应用程序开发中的固有问题,如HTTP无状态性和多线程安全问题,提供了一种更为高效、简洁的开发方式。 - **第一个JSF程序**:介绍如何创建一个简单的JSF项目,包括项目结构、依赖管理以及...
JSF的核心概念是组件模型,允许开发者使用可重用的UI组件来构建页面。 ### JSF组件模型 JSF中的组件分为两类:服务器端组件和客户端组件。服务器端组件在服务器上处理用户的请求,而客户端组件则负责在用户浏览器上...
- **快速原型开发**: 使用JSF可以快速搭建Web应用的基本框架,这对于快速原型开发尤为重要。 - **降低入门门槛**: 对于初学者来说,JSF提供了一套直观的API,可以让他们快速上手开发Web应用。 ##### 2. 高级应用...
在JSF页面中,我们可以使用Expression Language(EL)来访问和操作Backing Bean的属性,如`<h:inputText value="#{user.name}" />`,这会将输入框的值与`user` Bean的`name`属性关联。 JSF的配置文件默认为`faces-...
JavaScriptServerFaces...总结来说,这份“JSF很全面的帮助文档”将引导开发者深入理解JSF框架的各个方面,从基础概念到高级特性,包括组件使用、生命周期管理、数据绑定、异步处理等,是学习和提升JSF技能的重要资源。
总结来说,这个"JSF标签应用实例"提供了一个实际的环境来学习和实践JSF技术,包括标签的使用、组件的交互以及整个JSF应用的部署。通过深入研究和运行这个项目,开发者不仅可以理解JSF的基础,还能进一步掌握JavaWeb...
### Ajax4jsf用户指南知识点总结 #### 一、引言 - **简介**:Ajax4JSF是一款开源框架,其主要目标是为JavaServer Faces(JSF)项目添加Ajax功能,无需编写JavaScript代码。 - **特点**: - 充分利用JSF框架的优点...
总结来说,基于JSF全注解的框架是一种现代化的开发方式,它将JSF的功能与Java注解的强大结合在一起,降低了开发难度,提高了开发效率。通过理解和掌握这些知识点,开发者能够更好地构建出高效、可维护的JSF应用程序...
JSF框架提供了一种易于使用的API来构建动态Web应用程序,并且通过其丰富的特性集,如表单处理、验证、国际化支持等,使得开发者能够快速地创建出功能完备的Web应用。 #### 二、JSF架构组成 根据给定的内容,“JSF...