JSF 1.x
* Java EE 标准 (JSR 127, 252)
* 面向组件的 web框架
* 扩展性较好
* 有很多厂商工具支持
JSF 2.0
* Java EE 6 (JSR 314)的一部分
* 减少XML配置
* 更好的错误处理机制
* Ajax支持
* GET请求支持
* 更容易开发component
* 增加资源resource处理机制
- 更好的导航设计 :
<h:commandButton value="Press me!" action="next"/> <navigation-rule> <navigation-case> <from-outcome>next</from-outcome> <to-view-id>/next.jsp</to-view-id> </navigation-case> </navigation-rule>
<h:commandButton value="Press me!" action="next"/> //自动对应到页面了
- 受托管Bean采用Annotation标注
<h:inputText value="#{login.name}"/>
<managed-bean> <managed-bean-name>login</managed-bean> <managed-bean-class>com.corejsf.Login</managed-bean> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
@ManagedBean @SessionScoped public class Login { ... }
- 采用Facelets作为界面层
* Facelets是第三方扩展 (Jacob Hookom)
* 成为标准的一部分
* JSF中首选视图Handler
* 减少JSP的混乱和复杂
* 更好的错误处理机制
* Page composition - 可以作为书签的URL
* 在JSF 1.x时代,一切都是POST
* 浏览器只能回退一步
* 不可以另存为书签
* JSF 2.x 支持Get操作
* 增加新标签 h:button, h:link
* 视图参数
o 但请求进入时绑定到beans
o 可以绑定到下一个请求<f:metadata> <f:viewParam name="q" value="#{quizBean.currentProblem}" /> <f:viewParam name="score" value="#{quizBean.score}" /> </f:metadata> ... <h:link outcome="#{quizBean.skipOutcome}" value="Skip" includeViewParams="true"> <f:param name="q" value="#{quizBean.currentProblem + 1}" /> </h:link>
- 增加组合组件概念
* 有简单组件构成
* 可以绑定validators, listeners<composite:interface> <composite:actionSource name="form:loginAction"/> ... </composite:interface> <composite:implementation> <h:form...> ... <h:commandButton id="loginAction" value="Login" action="welcome"/> </h:form> </composite:implementation>
- 比较方便地使用AJAX:
<h:commandButton value="Update"> <f:ajax execute="input1 input2" render="output1"/> </h:commandButton>
- 资源加载
o 标准resources directory
o h:graphicImage, h:outputStylesheet, h:outputScript的 library, name attributes
<h:outputStylesheet library="css" name="styles.css" />
o 改善i18n
* 增加新的托管bean范围
o View scope
o Flash
* 14种新的时间
o 最常用的包括: preRenderView, postValidate
<f:event type="postValidate" listener="#{user.validate}"/>