在这里给大家总结一下jsf1.2和jsf2.0的区别:
1 比较显著的特点是Bean可以通过注解的方式来配置,少写很多xml配置文件。在jsf1.2中Bean都是通过配置文件face-config.xml声明的,而在jsf2.0里Bean可以直接通过注解@MangeBean,@sessionScoped来声明。
2 在jsf1.2中创建页面的时候一般页面的格式是。jsp或html页面,在jsf2.0中推荐使用.xhtml在创建页面。如果在页面中用到那种jsf的标签只要在页面的开通声明标签的命名空间就可以了。例如:
在jsf1.2中标签的声明是这样的
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<html xmlns=”http://www.w3.org/1999/xhtml” xmlns:f=”http://java.sun.com/jsf/core” xmlns:h=”http://java.sun.com/jsf/html”>
3 在jsf2.0中导航规则也变的更加简洁。在jsf1.2中到跳转那个页面是必须通过写在faces-config.xml 中的 navigation rule来进行跳转的,在jsf2.0中你可以直接通过<h:commandButton>的 action 属性后边加上要跳转的页面的名字来进行跳转的。当然负责的导航规则也是可以通过navigation rule来进行的。可以作为书签的URL 在JSF 1.x时代,一切都是POST,浏览器只能回退一步,不可以另存为书签,JSF 2.x 支持Get操作,增加新标签 h:button, h:link,视图参数,但请求进入时绑定到beans, 可以绑定到下一个请求.
<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>
4 在jsf2.0中新加了创建聚合标签的功能,可以把以有的标签组合到一块创建一个新的jsf标签。通过这个特性,用户可以通过聚合组件重构已有的视图,使它成为一个可以重用的聚合标签,并且可以为聚合标签设置各种属性。
代码示例:
<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>
5 对Ajax的完善。在jsf1.2中已经开始有对Ajax框架式的实现,他主要是通过<a4j:....>标签来实现的,而<a4j:....>是richsfaces中的东西,所以jsf1.2对Ajax的支持并不完善,而在jsf2.0中jsf推出了自己的一套Ajax标签,<f:ajax>,比较方便的使用Ajax。
示例如下:
<h:commandButton value="Update"> <f:ajax execute="input1 input2" render="output1"/> </h:commandButton>
6 在jsf2.0中拥有一个核心错误处理器,它汇集了几乎所有的报错,所以用户可以jsf组件很好的构造一个特定的jsf错误页。
7 在jsf1.2中两次请求之间会浪费大量的内存空间,而在jsf2.0中通过优化标签实现的api(flash scope)大大减少了内存的浪费,当然这些在我们不接触源码的情况下是看不到的。