2010/01/24

JavaServer Face(4)

製作簡單的JavaServer Face應用程式

JavaServer Faces技術提供一個簡單和有使用者親和力的流程來製作網頁應用程式

要製作一個簡單的JavaServer Faces應用程式典型上需要下列的工作:

  • 開發backing beans
  • 加入managed bean宣告
  • 製作網頁使用component標籤
  • 映射FaceServlet實例

這個範例是一個Hello應用程式,包含backing bean和一個網頁,當被client連接,網頁會印出HelloWorld訊息。

開發backing beans

backing bean(一種managed bean)是一個被JavaServer Faces所管理的JavaBean,在頁面裡的components
與backing beans被互相關聯來提供應用程式邏輯,這個簡單的backing bean,helloWorld.java包含了下面的
程式碼:

package Hello;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class Hello{
final String world = " Hello World! " ;

public String getWorld()
{ return world; }

}

這個backing bean範例設置了world的變數值為HelloWorld!,@ManagedBean宣告註冊了backing bean為一個
資源使用JavaServer Faces承做,更多的managed beans相關知識會在後面介紹。

製作網頁

在典型的Facelets應用程式裡,web pages被製作使用XHTML,這個網頁範例beanhello.xhtml是一個單純的XHTML
頁面,他包含了下面的內容:

<html xmlns= " http://www.w3.org/1999/xhtml " >
    <head>
        <meta http-equiv= " Content-Type " content= " text/html; charset=UTF-8 " />
        <title>JavaServer Faces Hello World Application</title>
    </head>
    <body>
        #{hello.world}
    </body>
</html>

一個Facelets XHTML網頁也可以包含多種的其他元素,等等我們會介紹這些元素。

網頁連接到backing bean透過Unified Expression Language(EL),值表示法#{hello.world},這取得了
world屬性的值從backing bean Hello. 注意到使用hello到參考backing bean Hello. 如果沒有名稱被特
定在@ManagedBean宣告,backing bean總是被連接到類別名稱為小寫字母的第一個字母

映射Face Servlet實例

最後的工作需要映射Faces Servlet,透過完成網頁部署敘述者(web.xml),一個典型的Face Servlet映射如下:

<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>
</servlet-mapping>

上面的程式碼片段表示了一個典型的JavaServer Faces網頁佈署敘述者,一個網頁佈署敘述者也包含了其他內容的相關
到一個JavaServer Faces應用程式設定,但是這些資訊並沒有在這裡出現。

如果你使用JavaEE 6 server例如Sun GlassFish Enterprise Server v3的話,映射Face Servlet會被自動
的完成。

helloWorld應用程式的生命週期

每一個應用程式有著生命週期,通常例如處理連進請求的工作,解碼參數,修改和儲存狀態,以及取得網頁到瀏覽器都是被實
現在網頁應用程式的生命週期,一些網頁應用程式的框架隱藏了生命週期的細節當其他需要你去手動的管理它們。

作為預設,JavaServer Faces自動為你處理大多數的生命週期行為,但是這暴露不同的請求生命週期部份,所以你可以
修改或是表現不同的行為如果你的應用程式需求授權的話。

理解JavaServer Faces應用程式的生命週期對初學者並不是這麼重要,但是這些訊息是有用的用來做出更複雜的應用程
式。

JavaServer Faces的生命週期從開始到結束跟著下面的活動:一個Client產生網頁要求,然後Server回應頁面,生命
週期包含兩個主要階段:執行(execute)和給予(render)

在execute階段,許多的動作可能發生:應用程式的view被建立或是修復,需求的參數被接受,轉變和驗證被表現為
component值,backing beans因component值而被更新以及應用程式邏輯被引發,對第一個初始(initial)要求而
言,只有view被建立。對隨之而來(postback)的要求而言,一些或是全部的其他動作就可能發生。

在render階段,要求view被給予作為給client的回應,給予基本上會產生HTML或是XHTML,是可以被瀏覽器所閱讀的

下面的短敘述是JavaServer Faces應用程式背後的生命週期大要範例

helloWorld範例走過下面階段當他被佈署到Server上:

1. 當helloWorld應用程式被建立和佈署在Server時,應用程式在未初始化(uninitiated)狀態
2. 當client發出了第一個請求(initial)給beanhello.xhtml網頁,helloWorld Facelets應用程式被編譯。
3. 被編譯的Facelets應用程式被執行害一個新的component樹(UIViewRoot)被建立給helloWorld應用程式(用
Faces Context製作)
4. component樹被component所佔領,然後backing bean屬性連接到它(用EL表示法hello.world來表示)
5. 一個新的view被建立依據component樹。
6. view被給予client作為回應
7. component樹被自動摧毀
8. 對隨之而來(postback)的請求,component樹被重新建立和保存的狀態被應用。

更多詳細的訊息請看JavaServer Faces Specification, Version 2.0 document

No comments:

Post a Comment