JSF生命周期.docx

上传人:b****2 文档编号:30834411 上传时间:2024-01-30 格式:DOCX 页数:33 大小:29.47KB
下载 相关 举报
JSF生命周期.docx_第1页
第1页 / 共33页
JSF生命周期.docx_第2页
第2页 / 共33页
JSF生命周期.docx_第3页
第3页 / 共33页
JSF生命周期.docx_第4页
第4页 / 共33页
JSF生命周期.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

JSF生命周期.docx

《JSF生命周期.docx》由会员分享,可在线阅读,更多相关《JSF生命周期.docx(33页珍藏版)》请在冰豆网上搜索。

JSF生命周期.docx

JSF生命周期

JSF专题

JSF生命周期

 JSF的每個元件基本上都是可替換的,像是轉換器(Converter)、驗證器(Validator)、元件(Component)、繪製器(Renderer)等等,每個元件都可以替換讓JSF在使用時更有?

椥裕鄬Φ乃冻龅木褪窃M合時的複雜性,為此,最基本的,如果您打算自訂一些JSF元件,那麼您對於JSF處理請求的每個階段必須要有所瞭解。

  下圖是JSF處理請求時的每個階段與簡單說明,起始狀態即使用者端發出請求時,終止狀態則相當於繪製器發出回應時:

  扣除事件處理,JSF總共必須經過六個階段:

回?

彤嬅妫≧estoreView)

  對於選擇的頁面如果是初次瀏覽則建立新的元件樹。

如果是會話階段,會?

氖褂谜叨嘶蛩欧鞫说馁Y料找尋資料以回?

兔總€元件的狀態?

K重建元件樹,如果不包括請求參數,則直接跳過接下?

淼碾A段直接繪製回應。

套用申請值(ApplyRequestValues)

  每個元件嘗試?

牡?

淼恼埱笾姓覍ぷ约旱膮?

K更新元件值,在這邊會觸發ActionEvent,這個事件會被排入?

辛兄校会嵩趩酒饝贸淌诫A段之後才會真正由事件處理者進行處理。

然而對於設定immeduate為true的命令(Commamnd)元件?

碚f,會立即處理事件?

K跳過之後的階段直接繪製回應,而對於設定immediate為true的輸入(Input)元件,會馬上進行轉換驗證?

K處理值變事件,之後跳過接下?

淼碾A段,直接繪製回應。

執行驗證(ProcessValidations)

  進行轉換與驗證處理,如果驗證錯誤,則會跳過之後的階段,直接繪製回應,結果是重新呼叫同一頁繪製結果。

更新模型值(UpdateModelValues)

  更新每一個與元件綁定的backingbean或模型物件。

喚起應用程式(InvokeApplication)

  處理動作事件,?

K進行後端應用程式邏輯。

繪製回應(RenderResponse)

  使用繪製器繪製頁面。

  如果您只是要「使用」JSF,則您最基本的只需要知道「執行驗證」、「更新模型值」、與「喚起應用程式」這三個階段及中間的事件觸發,JSF參考?

作將這三個階段之外的其它階段之複雜性隱藏起?

砹耍恍枰肋@幾個階段的處理細?

  然而如果您要自訂元件,則您還必須知道「回?

彤嬅妗埂ⅰ柑子谜埱笾怠古c「繪製回應」這些階段是如何處理的,這幾個階段相當複雜,所幸的是您可以使用JSF所提供的框架?

磉M行元件自訂,JSF提供的框架已經很大程度上降低了元件製作的複雜性。

  當然,即使JSF框架降低了複雜性,但?

際上要處理JSF自訂元件還是很複雜的一件事,在嘗試開發自訂元件之前,您可以先搜尋一些網站,像是ApacheMyFaceshttp:

//myfaces.apache.org/,看看是不是已經有相關?

似的元件已經開發完成,省去您重新自訂元件的氣力。

AddComment

发表于@2005年12月05日3:

59PM|评论(0)

表格标签

  很多資料經常使用表格?

肀憩F,JSF提供

dataTable>標籤讓您得以列舉資料?

K使用表格方式?

沓尸F,舉個?

際的例子?

砜矗僭O您撰寫了以下的兩個?

別:

UserBean.java

packageonlyfun.caterpillar;

publicclassUserBean{

 privateStringname;

 privateStringpassword;

 publicUserBean(){

 }

 

 publicUserBean(Stringname,Stringpassword){

  this.name=name;

  this.password=password;

 }

 

 publicStringgetName(){

  returnname;

 }

 publicvoidsetName(Stringname){

  this.name=name;

 }

 publicStringgetPassword(){

  returnpassword;

 }

 publicvoidsetPassword(Stringpassword){

  this.password=password;

 }

}

TableBean.java

packageonlyfun.caterpillar;

importjava.util.*;

publicclassTableBean{

 privateListuserList;

 

 publicListgetUserList(){

  if(userList==null){

    userList=newArrayList();

    userList.add(

     newUserBean("caterpillar","123456"));

    userList.add(

     newUserBean("momor","654321"));

    userList.add(

     newUserBean("becky","7890"));

  }

  

  returnuserList;

 }

}

  在TableBean中,我們假設getUserList()方法?

際上是?

馁Y料庫中查詢出UserBean的內容,之後傳回List物件,若我們的faces-config.xml如下:

faces-config.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEfaces-configPUBLIC"-//SunMicrosystems,

 Inc.//DTDJavaServerFacesConfig1.0//EN"

 "

 

  tableBean

  

    onlyfun.caterpillar.TableBean

  

  request

 

 

  userBean

  

    onlyfun.caterpillar.UserBean

  

  request

 

  我們可以如下使用

dataTable>?

懋a生表格資料:

index.jsp

<%@tagliburi="prefix="h"%>

<%@tagliburi="prefix="f"%>

view>

 

dataTablevalue="#{tableBean.userList}"var="user">

  

column>

    

outputTextvalue="#{user.name}"/>

  

column>

  

column>

    

outputTextvalue="#{user.password}"/>

  

column>

 

dataTable>

view>

   

  

dataTable>的value值綁定tableBean的userList方法,它會一個一個取出List中的資料?

K設定給var設定的user,之後在每一個column中我們可以顯示所列舉出的user.name與user.password,程式的結果會如下所示:

  所產生的HTML表格標籤如下:

 

  

    

    

  

  

    

    

  

  

    

    

  

 

caterpillar123456
momor654321
becky7890

  

dataTable>的value值綁定的對象可以是以下的型態:

陣列

java.util.List的?

java.sql.ResultSet的?

javax.servlet.jsp.jstl.sql.Result的?

javax.faces.model.DataModel的?

  

dataTable>配合

column>?

硪员砀竦姆绞斤@示資料,

column>中只能包括JSF元件或者是

facet>,JSF支援兩種facet:

header與footer。

分別用以設定表格的表頭與表尾文字,一個設定的例子如下:

dataTablevalue="#{tableBean.userList}"var="user">

 

column>

  

facetname="header">

    

outputTextvalue="Name"/>

  

facet>

  

outputTextvalue="#{user.name}"/>

  

facetname="footer">

    

outputTextvalue="****"/>

  

facet>

 

column>

 

column>

  

facetname="header">

    

outputTextvalue="Password"/>

  

facet>       

  

outputTextvalue="#{user.password}"/>

  

facetname="footer">

    

outputTextvalue="****"/>

  

facet>

 

column>

dataTable>

  所產生的表格如下所示:

  另外,對於表頭、表尾仍至於每一行列,都可以分別設定CSS風格,例如下面這個styles.css摘錄自CoreJSF一書:

styles.css

.orders{

 border:

thinsolidblack;

}

.ordersHeader{

 text-align:

center;

 font-style:

italic;

 color:

Snow;

 background:

Teal;

}

.evenColumn{

 height:

25px;

 text-align:

center;

 background:

MediumTurquoise;

}

.oddColumn{

 text-align:

center;

 background:

PowderBlue;

}

  可以在我們的頁面中如下加入:

....

....

dataTablevalue="#{tableBean.userList}"var="user"

        styleClass="orders"

        headerClass="ordersHeader"

        rowClasses="evenColumn,oddColumn">

 

column>

  

facetname="header">

    

outputTextvalue="Name"/>

  

facet>

  

outputTextvalue="#{user.name}"/>

  

facetname="footer">

    

outputTextvalue="****"/>

  

facet>

 

column>

 

column>

  

facetname="header">

    

outputTextvalue="Password"/>

  

facet>       

  

outputTextvalue="#{user.password}"/>

  

facetname="footer">

    

outputTextvalue="****"/>

  

facet>

 

column>

dataTable>

  則顯示的表格結果如下:

 在簡單的表格中曾經提過,

dataTable>可以列舉以下幾種型態的資料:

陣列

java.util.List的?

java.sql.ResultSet的?

javax.servlet.jsp.jstl.sql.Result的?

javax.faces.model.DataModel的?

  對於前四種型態,JSF?

際上是以javax.faces.model.DataModel加以包裝,DataModel是個抽象?

別,其子?

別都是位於javax.faces.model這個package下:

ArrayDataModel

ListDataModel

ResultDataModel

ResultSetDataModel

ScalarDataModel

  如果您想要對表格資料有更多的控制,您可以直接使用DataModel?

碓O定表格資料,呼叫DataModel的setWrappedObject()方法可以讓您設定對應型態的資料,呼叫getWrappedObject()則可以取回資料,例如:

TableBean.java

packageonlyfun.caterpillar;

importjava.util.*;

importjavax.faces.model.DataModel;

importjavax.faces.model.ListDataModel;

publicclassTableBean{

 privateDataModelmodel;

 privateintrowIndex=-1;

 

 publicDataModelgetUsers(){

  if(model==null){

    model=newListDataModel();

    model.setWrappedData(getUserList());

  }

  

  returnmodel;

 }

 

 privateListgetUserList(){

  ListuserList=newArrayList();

  userList.add(newUserBean("caterpillar","123456"));

  userList.add(newUserBean("momor","654321"));

  userList.add(newUserBean("becky","7890"));

  

  returnuserList;

 }

 

 publicintgetSelectedRowIndex(){

  returnrowIndex;

 }

 

 publicStringselect(){

  rowIndex=model.getRowIndex();

  return"success";

 }

}

  在這個Bean中,我們直接設定DataModel?

,將userList設定給它,如您所看到的,我們還可以取得DataModel?

的各個變項,在這個例子中,select()將作為點選表格之後的事件處理方法,我們可以藉由DataModel?

的getRowIndex()?

砣〉盟c選的是哪一row的資料,例如:

index.jsp

<%@tagliburi="prefix="h"%>

<%@tagliburi="prefix="f"%>

view>

 

form>           

  

dataTablevalue="#{tableBean.users}"var="user"

        styleClass="orders"

        headerClass="ordersHeader"

        rowClasses="evenColumn,oddColumn">

    

column>

     

facetname="header">

      

outputTextvalue="Name"/>

     

facet>

     

commandLinkaction="#{tableBean.select}">

      

outputTextvalue="#{user.name}"/>

     

commandLink>

      

     

facetname="footer">

      

outputTextvalue="****"/>

     

facet>

    

column>

    

column>

     

facetname="header">

      

outputTextvalue="Password"/>

     

facet>       

     

outputTextvalue="#{user.password}"/>

     

facetname="footer">

      

outputTextvalue="****"/>

     

facet>

    

column>

  

dataTable>

 

form>

 SelectedRow:

outputText

       value="#{tableBean.selectedRowIndex}"/>

view>

   

  DataModel的rowIndex是?

?

開始計算,當處理ActionEvent時,JSF會逐次遞增rowIndex的值,這讓您可以得知目前正在處理的是哪一個row的資料,一個執行的圖示如下:

发表于@2005年12月05日3:

55PM|评论(0)

选择表单标签

  選擇?

的標籤可略分為單選標籤與多選標籤,依外型的不同可以分為單選鈕(Radio)、核取方塊(CheckBox)、列示方塊(ListBox)與選單(Menu),以下分別先作簡單的說明。

selectBooleanCheckbox>

  在視圖上呈現一個核取方塊,例如:

我同意

selectBooleanCheckboxvalue="#\{user.aggree\}"/>

  value所綁定的屬性必須接受與傳回boolean型態。

這個元件在網頁上呈現的外觀如下:

selectOneRadio>、

selectOneListbox>、

selectOneMenu>

  這三個標籤的作用,是讓使用者?

钠渌峁┑倪x項中選擇一個項目,所不同的就是其外觀上的差別,例如:

selectOneRadiovalue="#{user.education}">

 

selectItemitemLabel="高中"itemValue="高中"/>

 

selectItemitemLabel="大學"itemValue="大學"/>

 

selectItemitemLabel="研究所以上"itemValue="研究所以上"/>

selectOneRadio>

  value所綁定的屬性可以接受字串以外的型態或是自訂型態,但記得如果是必須轉換的型態或自訂型態,必須搭配標準轉換器或自訂轉換器?

磙D換為物件,

selectOneRadio>的外觀如下:

  您也可以設定layout屬性,可設定的屬性是lineDirection、pageDirection,預設是lineDirection,也就是由左到右?

砼帕羞x項,如果設定為pageDirect

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1