JSF简单导航例子
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,用于存储数据及做简单的逻辑处理,内容如下:
-
package org.yoyo;
-
-
public class UserBean {
-
-
private String name;
-
private String password;
-
private String errMsg;
-
-
return name;
-
}
-
-
this.name = name;
-
}
-
-
return password;
-
}
-
-
this.password = password;
-
}
-
-
return errMsg;
-
}
-
-
this.errMsg = errMsg;
-
}
-
-
if("YOYO".equals(name)&&"1989".equals(password)){
-
errMsg = "";
-
return "success";
-
}else{
-
errMsg = "password error!";
-
return "fail";
-
}
-
}
-
-
}
-
编辑index.jsp,用于输入表单并在出错时提示错误信息,修改内容为:
-
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
<%@ page language="java" pageEncoding="GBK"%>
-
<title>First JSF Demo</title>
-
</head>
-
<f:view>
-
<h:form>
-
<hutputText value="#{user.errMsg}" /><p>
-
UserName: <h:inputText value="#{user.name}" /><p>
-
Password: <h:inputSecret value="#{user.password}" /><p>
-
<h:commandButton value="submit" action="#{user.verify}" /><p>
-
</h:form>
-
</f:view>
-
</body>
-
</html>
它的格式很像EL表达式,导入的标签库也很像JSTL。
注意,这里提交之后是要跑到UserBean的verify方法中,所以action处要表明使用哪个方法,否则可以写后面faces-config中配置的导航规则中的action名。
另外还要注意,使用JSF时,内容一定要写在<f:view>块中
新建welcome.jsp,用于成功时跳转显示信息,内容为:
-
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
-
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
-
<%@ page language="java" pageEncoding="GBK"%>
-
<title>First JSF Demo</title>
-
</head>
-
<f:view>
-
Welcome, <hutputText value="#{user.name}" />!<p>
-
<a href="index.jsf"> return </a>
-
</f:view>
-
</body>
-
</html>
编辑web.xml,加上JSF的配置:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<web-app version="2.4"
-
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">
-
<welcome-file-list>
-
<welcome-file>index.jsp</welcome-file>
-
</welcome-file-list>
-
-
<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>*.jsf</url-pattern>
-
</servlet-mapping>
-
-
</web-app>
这使得所有对jsf的访问都会映射到FaceServlet中去,它将会调用相应的jsp页面。
也可以该做.faces,但是你访问时则是跳到xxx.face了。
在WEB-INF目录下新建faces-config.xml,用于配置JSF:
-
<?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>/index.jsp</from-view-id>
-
<navigation-case>
-
<from-outcome>success</from-outcome>
-
<to-view-id>/welcome.jsp</to-view-id>
-
</navigation-case>
-
<navigation-case>
-
<from-outcome>fail</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>org.yoyo.UserBean</managed-bean-class>
-
<managed-bean-scope>session</managed-bean-scope>
-
</managed-bean>
-
</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好像没有什么关系。