JSF 探索 (1)

JSF 探索 (1)html

雖然JSF已經出來很久了,並且好像感受不是很潮流的框架了,而後當我看見他的時候,我以爲他的思想很好,並且隨着手機等client多樣化的出現,我相信人們
必將從新拾起JSF的思想。java

JSF說白了是事件驅動,web之前的時代我估計大部分都是事件驅動的開發模式,而web的出現,令人們更多關注瀏覽器上面的渲染,以及servlet和http的操做上。
web2.0的出現,令人們感受在瀏覽器上的操做更像之前c/s結構的操做,而手機client的熱捧更能體現將來多種客戶端訪問server的模式即將到來,也許你們開始
在想如何作新的框架,其實這種想法已經out了,JSF裏面早就有這個思想了,你只須要去關注JSF不就ok了?web

任何《* in action》的書老是讓programmer 興奮,一樣JSF in Action也是一本不錯的書,讓咱們一塊兒去看看它把。api

1.JSF 關鍵詞
UI component :靜態對象,它保存在server端,其實自己UI Component是javabean對象,他具備javabean具有的屬性,methods和events。一般多個component被組織爲一個頁面的視圖瀏覽器

Renderer:渲染器,renderer被用做渲染component,以及將用戶的輸入轉換爲component的值。特別當不一樣類型的client端,好比手機,那麼對應的就有手機相應格式的renderer。cookie

Validator:負責驗證用戶輸入值的可靠性,單個UI component能夠對應一個或多個Validator.session

Backing beans:後臺的javabean,作一些邏輯處理什麼的,存儲component的值,實現事件監聽器,他能夠引用component。app

Converter:顯示轉換器,好比時間格式的顯示,一個component能夠對應一個converter框架

Events and listeners:事件和監聽器webapp

Messages:顯示給用戶的信息

Navigation:一個頁面到另一個頁面的嚮導。


2.JSF請求的六個階段
Phase 1: Restore View
構建視圖頁面供用戶輸入或查看

Phase 2: Apply Request Values
獲取請求值

Phase 3: Process Validations
能夠對請求值進行驗證

Phase 4: Update Model Values
更新back bean 的值

Phase 5: Invoke Application
調用應用,執行相應的監聽器

Phase 6: Render Response
將response根據要求進行包裝後返回給用戶,這裏的包裝是指知道的頁面技術,好比html,好比手機展示技術

3.client and server component id
server component id能夠在component 的id屬性中顯性填寫id,以便在服務端能惟一標識該組件
client id 是繼承server component id,他最後體現的也是html 中的標籤,而id也爲對應標籤的id,與server component id不一樣的是,他有繼承關係,好比

<form id="myForm" method="post"
action="/jia-standard-components/client_ids.jsf"
enctype="application/x-www-form-urlencoded">
<p>
<input type="text" name="myForm:_id1" />
</p>
<p>
<input id="myForm:inputText" type="text" name="myForm:inputText" />
</p>
...
</form>
而對應的服務端
<p>
<h:outputText id="outputText" value="What are you looking at?"/>
</p>
<h:form id="myForm">
<p>
<h:inputText/>
</p>
<p>
<h:inputText id="inputText"/>
</p>
...
</h:form>

4.JSF EL 表達語言: 他是基於JSTL的描述
此外Jsp中application,session,page 四個scoped變量,只有page jsf中不支持

除了上面三個scoped變量,jsf還有下面一些隱性的變量
applicationScope:從application中獲取對象,好比#{applicationScope.myVariable} myVariable對象存放在application中
cookie:從cookie中獲取數據
facesContext:這個jsp2.0中沒有,當前請求的faceContext實例
header:http head頭信息,好比#{header['User-Agent']}
headerValues:多個head頭信息的載體 好比#{headerValues['Accept-Encoding'][3]}
initParam:初始化的一些參數好比servlet context initialization parameters 能夠這樣使用#{initParam.adminEmail}
param:等同jsp中的request.getParameter() 用法#{param.address}
paramValues:等同jsp中的request.getParameterValues 用法#{param.address[2]}
requestScope等同於jsp中reqeust 用法#{requestScope.user-Preferences}
sessionScope等同於jsp中session  用法#{sessionScope['user']}
view 這個變量jsp2.0中沒有,它表示當前視圖,它有三個屬性viewId,renderKitId, and locale 用法#{view.locale}

5.須要的jar包和文件
構建jsf環境須要jsf-api.jar,jsf-impl.jar,jstl.jar,standard.jar 以及配置文件faces-config.xml
須要在web.xml 中配置faceservlet
<web-app>
...
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
...
</web-app>

web.xml 中jsf定義的上下文的參數有
javax.faces.CONFIG_FILES
javax.faces.DEFAULT_SUFFIX
javax.faces.LIFECYCLE_ID
javax.faces.STATE_SAVING_METHOD

RI-specific configuration parameters:
com.sun.faces.NUMBER_OF_VIEWS_IN_SESSION
com.sun.faces.validateXml
com.sun.faces.verifyObjects

好比 <web-app> ... <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</param-value> </context-param> <context-param> <param-name>javax.faces.CONFIG_FILES</param-name> <param-value>/WEB-INF/navigation.xml,/WEB-INF/RegistrationWizard.xml</ param-value> </context-param> ... <web-app> 除了web.xml jsf相關的參數,自己jsf具備faces-config.xml 具體裏面的配置屬性能夠查看配置文件,能夠找可視化工具進行配置。

相關文章
相關標籤/搜索