Liny_@NotePad

沉迷ACG中

JSF简单导航例子

YOYO posted @ 2009年4月18日 03:47 in 【Java EE】 with tags jsf , 2990 阅读

  JSF全称Java Server Faces ,是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发。由于由Java Community Process (JCP) 推动,属于Java EE 5中的技术规范,而受到了厂商的广泛支持。
  JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架一样,JSF定义了一套JSF标签,能够生成与JavaBean属性绑定在一起的HTML表单元素。从应用开发者的角度看,两种框架十分相似,但是JSF可能会得到更多的支持,因为JSF是Java的标准。在未来的发展中,有可能所有的J2EE应用服务器都需要支持JSF。

话不多说……直接开始吧……:
先导入JSF的包,详细可以到这里下载。

建立一个UserBean,用于存储数据及做简单的逻辑处理,内容如下:

  1. package org.yoyo;
  2.  
  3. public class UserBean {
  4.        
  5.         private String name;
  6.         private String password;
  7.         private String errMsg;
  8.  
  9.         public String getName() {
  10.                 return name;
  11.         }
  12.  
  13.         public void setName(String name) {
  14.                 this.name = name;
  15.         }       
  16.  
  17.         public String getPassword() {
  18.                 return password;
  19.         }
  20.  
  21.         public void setPassword(String password) {
  22.                 this.password = password;
  23.         }
  24.  
  25.         public String getErrMsg() {
  26.                 return errMsg;
  27.         }
  28.  
  29.         public void setErrMsg(String errMsg) {
  30.                 this.errMsg = errMsg;
  31.         }
  32.        
  33.         public String verify(){ // 验证用户名密码:当用户名为YOYO而密码为1989时返回success,否则返回fail并设置错误信息
  34.                 if("YOYO".equals(name)&&"1989".equals(password)){
  35.                         errMsg = "";
  36.                         return "success";
  37.                 }else{
  38.                         errMsg = "password error!";
  39.                         return "fail";
  40.                 }
  41.         }
  42.  
  43. }
  44.  

编辑index.jsp,用于输入表单并在出错时提示错误信息,修改内容为:

  1. <%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
  2. <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
  3. <%@ page language="java" pageEncoding="GBK"%>
  4. <title>First JSF Demo</title>
  5. </head>
  6. <f:view>
  7.   <h:form>
  8.    <hutputText value="#{user.errMsg}" /><p>
  9.    UserName: <h:inputText value="#{user.name}" /><p>
  10.    Password: <h:inputSecret value="#{user.password}" /><p>
  11.    <h:commandButton value="submit" action="#{user.verify}" /><p>
  12.   </h:form>
  13. </f:view>
  14. </body>
  15. </html>
 

 

它的格式很像EL表达式,导入的标签库也很像JSTL。
注意,这里提交之后是要跑到UserBean的verify方法中,所以action处要表明使用哪个方法,否则可以写后面faces-config中配置的导航规则中的action名。
另外还要注意,使用JSF时,内容一定要写在<f:view>块中

新建welcome.jsp,用于成功时跳转显示信息,内容为:

  1. <%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
  2. <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
  3. <%@ page language="java" pageEncoding="GBK"%>
  4. <title>First JSF Demo</title>
  5. </head>
  6. <f:view>
  7.   Welcome, <hutputText value="#{user.name}" />!<p>
  8.   <a href="index.jsf"> return </a>
  9. </f:view>
  10. </body>
  11. </html>

 

编辑web.xml,加上JSF的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7.   <welcome-file-list>
  8.     <welcome-file>index.jsp</welcome-file>
  9.   </welcome-file-list>
  10.  
  11.   <description>JSF Demo</description>
  12.  
  13.   <display-name>JSF Demo</display-name>
  14.  
  15.   <servlet>
  16.    <servlet-name>Faces Servlet</servlet-name>
  17.    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  18.    <load-on-startup>1</load-on-startup>
  19.   </servlet>
  20.  
  21.   <servlet-mapping>
  22.    <servlet-name>Faces Servlet</servlet-name>
  23.    <url-pattern>*.jsf</url-pattern>
  24.   </servlet-mapping>
  25.  
  26. </web-app>

 

这使得所有对jsf的访问都会映射到FaceServlet中去,它将会调用相应的jsp页面。
也可以该做.faces,但是你访问时则是跳到xxx.face了。

在WEB-INF目录下新建faces-config.xml,用于配置JSF:

  1. <?xml version="1.0"?>
  2. <!DOCTYPE faces-config PUBLIC
  3. "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  4. "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
  5. <faces-config>
  6.     <navigation-rule>
  7.         <from-view-id>/index.jsp</from-view-id>
  8.         <navigation-case>
  9.             <from-outcome>success</from-outcome>
  10.             <to-view-id>/welcome.jsp</to-view-id>
  11.         </navigation-case>
  12.         <navigation-case>
  13.             <from-outcome>fail</from-outcome>
  14.             <to-view-id>/index.jsp</to-view-id>
  15.         </navigation-case>
  16.     </navigation-rule>
  17.        
  18.     <managed-bean>
  19.         <managed-bean-name>user</managed-bean-name>
  20.          <managed-bean-class>org.yoyo.UserBean</managed-bean-class>
  21.         <managed-bean-scope>session</managed-bean-scope>
  22.     </managed-bean>
  23. </faces-config>

其中,navigation-rule块就是一个导航规则,
这段配置意为,当来自view-id为index.jsp,传递的是success的话就跳转到welcome.jsp,是fail的话就跳转到index.jsp。
而managed-bean就跟之前jsp的useBean很相似,在此不再赘述。

这样,部署好后访问它的index.jsf就可以了。
有的同学可能会抛出NullPointerException和load() Exception,请考虑更换Tomcat服务器。

建议使用tomcat的6.0.18版本,jdk好像没有什么关系。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter