`
- 浏览:
21825 次
- 来自:
...
-
以前有一个梦想,找个做前端开发的女朋友。这样她做前端开发,我做后台开发,双剑合并,行走江湖,天下无敌。
一个月前,看了组件库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规范自定义组件,组件库没有帮你实现的,可以自己实现。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
PrimeFaces凭借其强大的功能和易于使用的特性,已经成为了很多开发者的首选UI组件库之一。无论是个人项目还是小型网站开发,PrimeFaces都能提供所需的功能和支持。随着不断的发展和完善,PrimeFaces将继续为开发者...
PrimeFaces是Java EE web开发中的一个开源用户界面框架,它为构建富互联网应用程序(RIA)提供了丰富的组件集合。这个"primefaces-3.5.zip"压缩包包含了PrimeFaces 3.5版本的相关资源,让我们来深入了解一下这个版本...
《PrimeFaces Cookbook》是一本专为Java开发人员编写的实用指南,主要介绍如何使用PrimeFaces框架来构建富互联网应用程序(RIA)。PrimeFaces是一个流行的开源JavaServer Faces(JSF)组件库,提供了大量的UI组件和...
primefaces-5.0.jar
PrimeFaces是一个开源的JavaServer Faces (JSF)组件库,它提供了一套丰富的UI组件,用于创建基于JSF的Web应用程序。PrimeFaces 3.5是一个版本号,表明这是一系列不断进化的组件库的迭代。JSF是一种Java EE的服务器端...
PrimeFaces是一个JavaServer Faces(JSF)的开源组件库,它旨在为开发人员提供丰富的组件集合,以便他们能够快速而轻松地开发JSF Web应用程序。PrimeFaces库中的组件支持多种功能,如数据表格、图表、树视图、对话框...
什么是PrimeFaces? PrimeFaces是一套开源的JSF组件套装,共有100多个支持AJAX的JSF组件。另外一个TouchFaces模块提供了用于移动web应用开发的UI工具。PrimeFaces的主要目标是为JSF创建终级组件集。 Prime技术 ...
PrimeFaces是一个用于提高JSF Web应用程序开发效率的开源类库。 UI Components:PrimeFaces UI模块提供了拥有Rich Web用户体 验的各种JSF组件。PrimeFaces使用Yahoo UI库做为默认的客户端框架。PrimeFaces提供的...
primefaces-5.2.jar
这个压缩包很可能是为了展示如何在SpringBoot应用中集成并使用PrimeFaces来构建用户界面。 首先,**SpringBoot** 是由Pivotal团队开发的,其目标是简化Spring应用的初始搭建以及后续的配置工作。它集成了许多常见的...
适合primefaces开发需要主题包,是在primefaces 网站的下载的,需要请下载,给1 分就行啊。
PrimeFaces是一个用于提高JSF Web应用程序开发效率的开源类库,具有丰富的UI界面组件,同时提供大量手机网页UI组件,程序包为开发网页的demo,可以使用tomcat8启,使你可以在demo的提示下使用UI组件轻松开发你的程序
在提供的"PrimeFaces中文.pdf"文件中,很可能包含了PrimeFaces组件的详细中文文档,这将帮助开发者理解每个组件的用法、属性、事件以及示例。对于初学者来说,这是非常宝贵的参考资料,可以帮助他们快速上手...
Primefaces 框架包 是
PrimeFaces 是一个流行的开源JavaServer Faces (JSF)组件库,专为构建用户界面而设计。版本3.3.1是这个库的一个特定发行版,它提供了大量的UI组件,如表格、图表、对话框等,使得开发人员可以更加便捷地创建功能丰富...
### PrimeFaces 最新版本使用说明 #### 一、关于PrimeFaces **PrimeFaces** 是一个为JavaServer Faces (JSF) 提供丰富的组件库的框架。它提供了许多易于使用的、功能强大的用户界面组件,旨在帮助开发者快速构建...
### PrimeFaces指南:JSF快速入门 #### 一、引言 **PrimeFaces**是一款基于JavaServer Faces(JSF)的开源用户界面组件库。它提供了丰富的组件集合,旨在简化Web应用开发流程,并提高开发效率。PrimeFaces不仅支持...
7. **示例丰富**:压缩包中的示例代码涵盖了PrimeFaces所有组件的用法,对于初学者来说是很好的学习资料。你可以通过阅读和运行这些示例来了解每个组件的功能和配置方法。 在JavaServer Faces(JSF)框架中,...
在"knowndefects-master"这个压缩子文件中,很可能包含了"knowndefects"项目的主分支源代码。通常,"master"分支代表了一个项目的主线,包含了最新且最稳定的代码。开发者可以查看这个分支的代码,了解如何使用这些...