在JSF中是根據(jù)faces-config.xml中<navigation-rule>設(shè)定,以決定在符合的條件成立時(shí),該連結(jié)至哪一個(gè)頁面,一個(gè)基本的設(shè)定如下:
....
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/pages/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>
....
對(duì)於JSF,每一個(gè)視圖(View)都有一個(gè)獨(dú)特的識(shí)別(identifier),稱之為View ID,在JSF中的View ID是從Web應(yīng)用程式的環(huán)境相對(duì)路徑開始計(jì)算,設(shè)定時(shí)都是以/作為開頭,如果您請(qǐng)求時(shí)的路徑是/pages/index.faces,則JSF會(huì)將副檔名改為/pages/index.jsp,以此作為view-id。
在<navigation-rule>中的<from-view-id>是個(gè)選擇性的定義,它規(guī)定了來源頁面的條件,<navigation-case>中定義各種導(dǎo)覽條件,<from-outcome>定義當(dāng)表單結(jié)果符合的條件時(shí),各自改導(dǎo)向哪一個(gè)目的頁面,目的頁面是在<to-view-id>中定義。
您還可以在<navigation-case>中加入<from-action>,進(jìn)一步規(guī)範(fàn)表單結(jié)果必須根據(jù)哪一個(gè)動(dòng)作方法(action method),當(dāng)中是使用
JSF Expression Language 來設(shè)定,例如:
....
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-action>#{user.verify}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case>
....
</navigation-rule>
....
在導(dǎo)航時(shí),預(yù)設(shè)都是使用forward的方式,您可以在<navigation-case>中加入一個(gè)<redirect/>,讓JSF發(fā)出讓瀏覽器重新導(dǎo)向(redirect)的header,讓瀏覽器主動(dòng)要求新網(wǎng)頁,例如:
....
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
<redirect/>
</navigation-case>
....
</navigation-rule>
....
您的來源網(wǎng)頁可能是某個(gè)特定模組,例如在/admin/下的頁面,您可以在<from-view-id>中使用wildcards,也就是使用 * 字元,例如:
....
<navigation-rule>
<from-view-id>/admin/*</from-view-id>
<navigation-case>
<from-action>#{user.verify}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case>
....
</navigation-rule>
....
在上面的設(shè)定中,只要來源網(wǎng)頁是從/admin來的,都可以開始測(cè)試接下來的<navigation-case>。
<from-view-id>如果沒有設(shè)定,表示來源網(wǎng)頁不作限制,您也可以使用 * 顯式的在定義檔中表明,例如:
....
<navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
....
</navigation-rule>
....
或者是這樣:
....
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
....
</navigation-rule>
....
posted on 2008-05-22 12:36
周行 閱讀(636)
評(píng)論(0) 編輯 收藏 所屬分類:
JSF