JSF以MVC模式为基础,与Struts不同,JSF的目标是希望以一个与Swing相类似的方式来开发网页,因此,从JSF的结构图当中,他的核心概 念不是页面,而是控件树,也就是说,当用户提交一个请求时,JSF会先将页面上的组件先转换为与Swing当中类似的,由容器和控件组成的控件树,然后数 据和事件被设置到对应的控件上,然后以一种与Swing类似的方式,来处理后续的请求。控件树是整个JSF的核心,所有其他的一切一切都是围绕着这棵控件 树展开的
JSF的处理核心是控件树,他会先将页面上所声明的控件转换为一棵控件树,后续的操作将在这颗控件树上进行。为了提高性能,系统会为之前生成的控件树提供 缓存。Restore View的工作就是在缓存当中查找是否存在之前已经生成好的控件树,如果没有,则根据页面的内容,重新生成。
导入包:
Java代码
- jsf-impl.jar
- * jsf-api.jar
- * commons-digester.jar
- * commons-collections.jar
- * commons-beanutils.jar
- * jstl.jar
- * standard.jar
jsf-impl.jar * jsf-api.jar * commons-digester.jar * commons-collections.jar * commons-beanutils.jar * jstl.jar * standard.jar
web.xml配置
Xml代码
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
- <description>
- JSF Demo
- </description>
- <display-name>JSF Demo</display-name>
- <servlet>
- <servlet-name>Faces Servlet</servlet-name>
- <servlet-class>
- javax.faces.webapp.FacesServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>*.faces</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
- </web-app>
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <description> JSF Demo </description> <display-name>JSF Demo</display-name> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class> javax.faces.webapp.FacesServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
定义一个javabean
Java代码
- package onlyfun.caterpillar;
- public class UserBean {
- private String name;
- public void setName(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- }
package onlyfun.caterpillar; public class UserBean { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } }
定义一个/WEB-INF/faces-config.xml像struts中的struts-config.xml文件一样,实现跳转:
Xml代码
- <?xml version="1.0"?>
- <!DOCTYPE faces-config PUBLIC
- "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
- "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
- <faces-config>
- <navigation-rule>
- <from-view-id>/pages/index.jsp</from-view-id>
- <navigation-case>
- <from-outcome>login</from-outcome>
- <to-view-id>/pages/welcome.jsp</to-view-id>
- </navigation-case>
- </navigation-rule>
- <managed-bean>
- <managed-bean-name>user</managed-bean-name>
- <managed-bean-class>
- onlyfun.caterpillar.UserBean
- </managed-bean-class>
- <managed-bean-scope>session</managed-bean-scope>
- </managed-bean>
- </faces-config>
<?xml version="1.0"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd"> <faces-config> <navigation-rule> <from-view-id>/pages/index.jsp</from-view-id> <navigation-case> <from-outcome>login</from-outcome> <to-view-id>/pages/welcome.jsp</to-view-id> </navigation-case> </navigation-rule> <managed-bean> <managed-bean-name>user</managed-bean-name> <managed-bean-class> onlyfun.caterpillar.UserBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> </faces-config>
index.jsp
Html代码
- <%@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=Big5"%>
- <html>
- <head>
- <title>第一个JSF程序</title>
- </head>
- <body>
- <f:view>
- <h:form>
- <h3>请输入您的名称</h3>
- 名称: <h:inputText value="#{user.name}"/><p>
- <h:commandButton value="送出" action="login"/> //action也可以指定为某类的某个方法,只要该方法返回一个JSF配置文件中的一个跳转
- </h:form>
- </f:view>
- </body>
- </html>
<%@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=Big5"%> <html> <head> <title>第一个JSF程序</title> </head> <body> <f:view> <h:form> <h3>请输入您的名称</h3> 名称: <h:inputText value="#{user.name}"/><p> <h:commandButton value="送出" action="login"/> </h:form> </f:view> </body> </html>
welcome.jsp
Java代码
- <strong><%@ 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=Big5"%>
- <html>
- <head>
- <title>第一个JSF程序</title>
- </head>
- <body>
- <f:view>
- <h:outputText value="#{user.name}"/> 您好!
- <h3>欢迎使用 JavaServer Faces!</h3>
- </f:view>
- </body>
- </html></strong>
<%@ 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=Big5"%> <html> <head> <title>第一个JSF程序</title> </head> <body> <f:view> <h:outputText value="#{user.name}"/> 您好! <h3>欢迎使用 JavaServer Faces!</h3> </f:view> </body> </html>