JSF以MVC模式为基础,与Struts不同,JSF的目标是希望以一个与Swing相类似的方式来开发网页,因此,从JSF的结构图当中,他的核心概念不是页面,而是控件树,也就是说,当用户提交一个请求时,JSF会先将页面上的组件先转换为与Swing当中类似的,由容器和控件组成的控件树,然后数据和事件被设置到对应的控件上,然后以一种与Swing类似的方式,来处理后续的请求。控件树是整个JSF的核心,所有其他的一切一切都是围绕着这棵控件树展开的
JSF的处理核心是控件树,他会先将页面上所声明的控件转换为一棵控件树,后续的操作将在这颗控件树上进行。为了提高性能,系统会为之前生成的控件树提供缓存。Restore View的工作就是在缓存当中查找是否存在之前已经生成好的控件树,如果没有,则根据页面的内容,重新生成。
faces-config.xml
<faces-config> <navigation-rule> <from-view-id>/*</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/welcome.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>failure</from-outcome> <to-view-id>/index.jsp</to-view-id> </navigation-case> </navigation-rule>
<managed-bean> <managed-bean-name>user</managed-bean-name> <managed-bean-class> test.UserBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>user1</managed-bean-name> <managed-bean-class> test.userbean1 </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
web.xml
<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
页面:
index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@page contentType="text/html;charset=gb2312"%> <html> <head> <title>第一个JSF程序</title> </head> <body> <f:view> <h:form> <h3>请输入您的名称</h3> <h:outputText value="#{user.errMessage}"/><p> 名称: <h:inputText value="#{user.name}"/><p> 密码: <h:inputSecret value="#{user.password}"/><p> <h:commandButton value="送出" action="#{user.verify}"/> </h:form> </f:view> </body> </html>
welcome.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@page contentType="text/html;charset=gb2312"%> <html> <head> <title>第一个JSF程序</title> </head> <body> <f:view> <h:outputText value="#{user.name}"/> 您好!</p> <h3>欢迎使用 JavaServer Faces!</h3> </f:view> </body> </html>
bean
package test; public class UserBean { private String name; private String password; private String errMessage;
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setPassword(String password) { this.password = password; }
public String getPassword() { return password; }
public void setErrMessage(String errMessage) { this.errMessage = errMessage; }
public String getErrMessage() { return errMessage; }
public String verify() { if(!name.equals("tiger") ||!password.equals("tiger")) { errMessage = "名称或密码错误"; return "failure"; } else { errMessage = "欢迎"; return "success"; } } }