本身作的一個登陸的例子,涵蓋了jsf中的國際化,類型轉換,驗證器,監聽器等 html
學了jsf1.2的流程 ,如今該學jsf2.1了, 廢話少說,上代碼.... java
(文中若有錯誤之處,還請高手賜教) jquery
(jsf1.2是jsf-api.jar和jsf-impl.jar; web
jsf2.1已經合併成一個.jar了:javax.faces-2.1.11.jar) spring
使用JSF 還須要其它加包的支持,這些都是開源公共接口和類庫: api
commons-beanutils.jar app
commons-collections.jar webapp
commons-digester.jar jsp
commons-logging.jar 性能
jstl.jar
standard.jar
在web.xml中增長FacesServlet,如:
<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>
<url-pattern>*.xhtml</url-pattern> jsf1.2 用的是*.faces,不用糾結這個你懂的
</servlet-mapping>
在熟看這個頁面的時候,你須要去了解和學習下jsf的一些標籤知識。
index.xhtml開頭
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
引入標籤庫,也是一種規範,(在JSF2.X中引入了全新的界面表現模型Facelets,能夠方便的實現自有組件定製和頁面模版化。既強化了JSF提出以來的組件式開發思想,又簡化了自有組件的開發。從Tapestry吸取來的模版方式不只可讓開發工程師像搭積木同樣組合一個頁面,更能夠搭好架子後只在相關頁面中只修改須要改變的部分。Facelets還有一大好處,就是將全部java代碼從頁面標籤中移出,讓分工更明細了,分工合做原本就是人類發展的一大基石,在這兒也體現了)
接下來的部分:(這裏我給初學者重點說明下:--高手見笑了)
<f:view locale="#{user.locale}"> // 能夠設置國際化語言
<h:head>
<title>My first JSF2.1</title>
<meta http-equiv="content-type" content="text/html; charset=GBK" />
</h:head>
<h:body>
<f:loadBundle var="msgs" basename="message" /> //讀取國際化資源文件
<h:form>
<h3>
<h:outputText value="#{msgs.title}" />
//這個標籤是顯示打印的,value 是資源文件中的內容
<h:outputText value="#{user.date}">
<f:convertDateTime pattern="yyyy-MM-dd"/>
//<f:convertDateTime 是jsf標準的轉換器 ,pattern就是你要轉化的格式,好比 pattern="yyyy/MM/dd" ,jsf還提供自定義轉換器,這裏不做詳細說明。
</h:outputText>
</h3>
<h:outputText value= "#{user.msg}" /><br/>
<h:messages layout="table" style="color:red"/> // 這裏能夠顯示異常提示信息,並設置格式等
<h:outputText value="#{msgs.name}" />:<h:inputText value="#{user.name}" required="true"/>
// required="true" 用過struts2校驗器或jquery校驗器的童鞋不難理解,這個是jsf中的校驗:必填,不能爲空!
<br />
<h:outputText value="#{msgs.pwd}" />:
<h:inputSecret value="#{user.password}" required="true">
<!--<f:validateLength minimum="6"/>-->//jsf標準校驗器 「最少爲6個字符」
<f:validator validatorId="pwdValidator"/>
//jsf也很靈活,提供自定義校驗器,這裏就是我自定義的校驗器,用於驗證密碼的,下面有詳解
</h:inputSecret>
<br />
<h:outputText value="#{msgs.date}" />:
<h:inputText id="dateField" value="#{user.date}">
<f:convertDateTime pattern="yyyy-MM-dd"/>
</h:inputText><br/>
<h:commandButton actionListener="#{user.verify_event}" action="#{user.outcome}" value="#{msgs.submit}" />
//這個就是一個提交按鈕了,action=「要提交的地方」 這裏要提交到welcome.xhtml,就是但願登陸成功後跳到welcome.xhtml。若是#{user.outcome}的值是welcome,也就是說action="welcome"的時候,頁面就到welcome.xhtml頁面了,懂了吧;固然有時候用到轉發,jsf中是這樣的:action="xxx?faces-redirect=true"。
講講actionListener吧,jsf是基於事件驅動的,這個事件(指點擊按鈕)對應的處理方法就是
(actionListener="#{user.verify_event}" )名稱爲「user」的這個Bean中的verify_event方法,這個方法在下文找
<!-- <h:commandButton immediate="true">
//對於JSF 的input 與command 組件,都有一個immediate 屬性,
若是immediate="true" ,
則指定的事件就成爲當即事件。當按下這個按鈕後,
JSF 套用請求值以後會當即處理指定的actionListener,
而再也不進行驗證、更新模型值,簡單的說,就這個程序來講,
您在輸入字段與密碼字段中填入的值,不會影響您的user.name與user.password;
若是您要註冊多個ActionListener
<f:actionListener type= "com.dengyang.mylistener.LogActioinListener"/>
<f:actionListener type= "com.dengyang.mylistener.VertifyActioinListener" />
</h:commandButton>
-->
<h:selectOneMenu value="#{user.locale}" onchange="this.form.submit();" valueChangeListener="#{user.changeLocale}">
<f:selectItem itemLabel="Chinese" itemValue="zh_CN"/>
<f:selectItem itemLabel="English" itemValue="en_US"/>
</h:selectOneMenu>
</h:form>
</h:body>
</f:view>
</html>
<f:loadBundle var="msgs" basename="message" /> //讀取國際化資源文件 想懂這個 你要先看看資源文件
message_en_US.properties 英文:
title=JSF2.1test
name=name
pwd=password
submit=submit
langunge=English
hello=Hello
welcome=welcome to use JavaServer Faces
date=date
message_zh_CN.properties 中文:
title=JSF2.1\u793A\u4F8B
name=\u540D\u5B57
pwd=\u5BC6\u7801
submit=\u63D0\u4EA4
langunge=\u4E2D\u6587
hello=\u60A8\u597D
welcome=\u6B22\u8FCE\u4F7F\u7528JavaServer Faces
date=\u65E5\u671F
<f:loadBundle var="msgs" basename="message" /> 默認根據系統語言環境讀取對應國際化資源文件
<h:outputText value="#{msgs.title}" /> 這個就是顯示資源文件對應語言內容了
想要代碼的初學童鞋能夠email,咱們一塊兒學習,一塊兒成長!