MyException - 我的异常网
当前位置:我的异常网» Web前端 » primefaces,看起来很美

primefaces,看起来很美

www.MyException.Cn  网友分享于:2013-07-05  浏览:264次
primefaces,看上去很美

以前有一个梦想,找个做前端开发的女朋友。这样她做前端开发,我做后台开发,双剑合并,行走江湖,天下无敌。
一个月前,看了组件库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规范自定义组件,组件库没有帮你实现的,可以自己实现。
1 楼 weixinjie 2012-03-31  
各种坑对以后用到的时候会节省不少时间~
感谢老大~
2 楼 hejinguo727 2012-05-28  
那这3个哪个会好一点呢?
richfaces primefaces icefaces

文章评论

“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
旅行,写作,编程
旅行,写作,编程
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
鲜为人知的编程真相
鲜为人知的编程真相
程序员和编码员之间的区别
程序员和编码员之间的区别
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
我是如何打败拖延症的
我是如何打败拖延症的
程序员的鄙视链
程序员的鄙视链
 程序员的样子
程序员的样子
程序员都该阅读的书
程序员都该阅读的书
那些争议最大的编程观点
那些争议最大的编程观点
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
老程序员的下场
老程序员的下场
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
编程语言是女人
编程语言是女人
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
漫画:程序员的工作
漫画:程序员的工作
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
每天工作4小时的程序员
每天工作4小时的程序员
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
一个程序员的时间管理
一个程序员的时间管理
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
Java程序员必看电影
Java程序员必看电影
中美印日四国程序员比较
中美印日四国程序员比较
代码女神横空出世
代码女神横空出世
总结2014中国互联网十大段子
总结2014中国互联网十大段子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员必看的十大电影
程序员必看的十大电影
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有