學習掌握:
jsf 驗證
jsf 國際化
jsf 導航
login_zh_CN.properties
title=第一個jsf程序
username=用戶名
password=密碼
submit=登陸
usererror=用戶名必須添
passerror=密碼錯誤
這個文件放在 新建的? firstjsf包下
編譯
native2ascii?–encoding?gb2312 login_src.properties? login_zh_CN.properties
新建文件
Login.java
放在
login.firstjsf包下.
src
package?login.firstjsf;
import?javax.faces.context.FacesContext;
import?javax.faces.component.UIComponent;
import?javax.faces.application.FacesMessage;
import?javax.faces.validator.ValidatorException;
import?java.util.ResourceBundle;
import?java.util.Map;
import?domain.SecurityManager;
import?java.io.Serializable;
public?class?Login?extends?Object?implements?Serializable{
??private?String?username;
??private?String?password;
??private?ResourceBundle?bundle;
??private?FacesMessage?loginErrorMessage;
??private?FacesMessage?usernameRequiredMessage;
??private?FacesMessage?passwordRequiredMessage;
??public?LogonForm()?{
????//?初始化資源文件
?????bundle?=?ResourceBundle.getBundle("login.logon");//得到國際化資源文件
?????usernameRequiredMessage?=?new?FacesMessage(FacesMessage.SEVERITY_INFO,?message,?null);
?????string??message?=?bundle.getString("usererror");
?????passwordRequiredMessage?=?new?FacesMessage(FacesMessage.SEVERITY_INFO,?message,?null);
?????message?=?bundle.getString("passworderror");
??}
??public?String?logining()?{
?
????if?(getUsername()=="okok")?{
?????????return?"success";
??????????//success在?faces-config.xml配置,這就是動態導航
????else
????return?"failure";
??}
??public?String?getPassword()?{
????return?password;
??}
??public?void?setPassword(String?string)?{
????password?=?string;
??}
??public?String?getUsername()?{
????return?username;
??}
??public?void?setUsername(String?string)?{
????username?=?string;
??}
//前臺驗證?沒有填提示錯誤信息?用戶必須填寫
??public?void?validateName(FacesContext?context,?UIComponent?toValidate,
???????????????????????????????Object?value)?throws?ValidatorException?{
?
????if(name.length()<?1||?length?>?16)?{
?????throw?new?ValidatorException(usernameErrorMessage);
????}
????return;
??}
//驗證密碼必填
??public?void?validatePassword(FacesContext?context,?UIComponent?toValidate,
???????????????????????????????Object?value)?throws?ValidatorException?{
????if(name.length()<?1||?length?>?16)?{
?????throw?new?ValidatorException(passwordErrorMessage);
????}
????return;
??}
}
前臺
<!--導入jsf標簽-->
<%@taglib?uri="http://java.sun.com/jsf/html"?prefix="h"%>
<%@taglib?uri="http://java.sun.com/jsf/core"?prefix="f"%>
<!--國際化?文件-->
<f:loadBundle?basename="firstjsf.login"?var="first"/>
<f:view>
<head>
<title>
<!--輸出標題-->
??<h:outputText?value="#{first.title}"/>
</title>
</head>
<body>
<h:form>
<!--輸出用戶名-->
<h:outputText?value="#{first.username}"/>
<!--文本框?用戶名?“login"?在配置文件?實際是login.firstjsf.Login類?validator?驗證-->
<h:inputText?id="username"?value="#{login.username}"?maxlength="20"validator="#{login.validateName}"/>
<!--輸出密碼-->
?<h:outputText?value="#{first.Password}"/>
<!--文本框--〉
???<h:inputText?id="username"?value="#{login.password}"??maxlength="16"?validator="#{login.validatePassword}"/>
<!--btton?按鈕-->
??<h:commandButton?value="#{login.submit}"?action="#{login.logining}"/>
<!--消息提示-->
?<h:messages?showSummary="true"?showDetail="false"?layout="table"/>
</f:view>
</body>
web.xml?配置文件
<?xml?version="1.0"?encoding="UTF-8"?>
<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">
??<display-name>JSFWebModular</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?faces-config.xml?文件
配置受管理的Bean
??<managed-bean>
????<description>first?jsf</description>
????<managed-bean-name>login</managed-bean-name>
????<managed-bean-class>login.firstjsf.Login</managed-bean-class>
????<managed-bean-scope>request</managed-bean-scope>
??</managed-bean>
導航配置
<navigation-rule>
????<!--from-view-id?標識初始頁-->
????<from-view-id>/Logon.jsp</from-view-id>
?????<!--navigation-case?標識一個導航塊-->?
?????<navigation-case>
??????<from-outcome>success</from-outcome>
<!--to-view-id元素為這個導航塊指定目標頁-->
??????<to-view-id>/ok.jsp</to-view-id>
????</navigation-case>
????<navigation-case>
<!--from-outcome元素是navigation-rule中from-view-id子元素處理的結果-->
??????<from-outcome>failure</from-outcome>
??????<to-view-id>/error.jsp</to-view-id>
????</navigation-case>
注:
要實現動態導航,按鈕或鏈接必須有一個方法引用,以用于調用相應的方法,導航處理器根據方法返回的字符串來匹配導航規則