国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JSF導(dǎo)航文件如何設(shè)置實(shí)例解析

2019-11-17 05:55:09
字體:
供稿:網(wǎng)友

The javaServer Faces (JSF)的Navigation框架提供了一些導(dǎo)航規(guī)則,可以使您在設(shè)計(jì)網(wǎng)站應(yīng)用程序時(shí)定義view(大部分是jsp頁(yè)面)之間的頁(yè)面導(dǎo)航。這些規(guī)則和 其他一些設(shè)置一起定義在JSF配置文件中。

該文件的名稱一般是 faces-config.xml 。不過完全可以把這個(gè)文件名改成其他名字,甚至可以用多個(gè)配置文件來存放相關(guān)的JSF配置信息,只要在web.xml文件中進(jìn)行類似下面的設(shè)置:

Code:

 <context-param> 

<param-name>

javax.faces.CONFIG_FILES

</param-name>

<param-value>

/WEB-INF/faces-config.xml,

/WEB-INF/faces-beans.xml

</param-value>

</context-param>

一個(gè)簡(jiǎn)單的例子

一個(gè)導(dǎo)航規(guī)則的構(gòu)成其實(shí)很簡(jiǎn)單,讓我們來看第一個(gè)例子:

Code:

 <navigation-rule> 

<from-view-id>

/pages/inputname.jsp

</from-view-id>

<navigation-case>

  <from-outcome>sayHello</from-outcome>

  <to-view-id>

  /pages/greeting.jsp

  </to-view-id>

</navigation-case>

<navigation-case>

 <from-outcome>sayGoodbye</from-outcome>

 <to-view-id>

 /pages/goodbye.jsp

 </to-view-id>

</navigation-case>

</navigation-rule>


這段代碼規(guī)定了名為 /pages/inputname.jsp view的兩個(gè)輸出(outcomes), sayHello 和 sayGoodbye ,它們分別同特定的頁(yè)面相關(guān)聯(lián)。設(shè)置一個(gè)默認(rèn)的輸出事件(Outcome Case)

基本結(jié)構(gòu)很簡(jiǎn)單,但是可以在這個(gè)基礎(chǔ)在進(jìn)行很多變化。請(qǐng)看下一段代碼:

Code:

 <navigation-rule> 

<from-view-id>

/pages/inputname.jsp

</from-view-id>

<navigation-case>

 <from-outcome>sayHello</from-outcome>

 <to-view-id>

 /pages/greeting.jsp

 </to-view-id>

</navigation-case>

<navigation-case>

  <to-view-id>

  /pages/goodbye.jsp

  </to-view-id>

</navigation-case>

</navigation-rule>


該段代碼同上面的代碼非常類似,不同的是在第二個(gè) navigation-case 中缺少了 from-outcome元素。這意味著所有除sayHello之外的outcome都將進(jìn)入/pages/goodbye.jsp頁(yè)面。

利用模式

JSF的navigation模型答應(yīng)我們利用模式(patterns)。這些模式有一個(gè)以星號(hào)“*”結(jié)尾的字符串組成。參見下例:

Code:

 <navigation-rule> 

<from-view-id>/pages/*</from-view-id>

<navigation-case>

<from-outcome>menu</from-outcome>

<to-view-id>/menu/main_main.jsp</to-view-id>

</navigation-case>

<navigation-case>

  <from-outcome>info</from-outcome>

  <to-view-id>/menu/info.Html</to-view-id>


</navigation-case>

</navigation-rule>


這段導(dǎo)航規(guī)則適用于類似 /pages/exit.jsp 之類的任何以 /pages/ 為起始URL的頁(yè)面。注重星號(hào)一定要放在最后。例如一個(gè)類似 / pages/*.jsp 的模式是無效的。

Resolving More Than One Matching Rule

現(xiàn)在我們來細(xì)察一下JSF導(dǎo)航模型中該如何處理多個(gè)規(guī)則。具體見下面例子:

Code:

 <navigation-rule> 

<from-view-id>/pages/*</from-view-id>

<navigation-case>

 <from-outcome>info</from-outcome>

 <to-view-id>/menu/generalHelp.html</to-view-id>

</navigation-case>

</navigation-rule>

<navigation-rule>

<from-view-id>/pages/login.jsp</from-view-id>

<navigation-case>

  <from-outcome>info</from-outcome>

  <to-view-id>/menu/loginHelp.html</to-view-id>

</navigation-case>

</navigation-rule>
該例中,第二個(gè)導(dǎo)航規(guī)則,而不是前一個(gè),將對(duì) /pages/login.jsp 生效,盡管該頁(yè)面也匹配第一個(gè)規(guī)則中的模式 /pages/* 。這說明對(duì)于一個(gè)特定的 from-outcome ,匹配更為具體的規(guī)則將生效。

"Global" Outcomes



假設(shè)現(xiàn)在我們需要一個(gè)globalHelp輸出(outcome) 可以使得從任何頁(yè)面轉(zhuǎn)到幫助頁(yè)面 /help/index.html 。要實(shí)現(xiàn)該效果,可以利用下面兩個(gè)聲明中的任何一個(gè):

Code:

<navigation-rule> 

<from-view-id>*</from-view-id>

<navigation-case>

<from-outcome>globalhelp</from-outcome>

<to-view-id>

/menu/generalHelp.html

</to-view-id>

</navigation-case>

</navigation-rule>

<navigation-rule>

<navigation-case>

<from-outcome>globalhelp</from-outcome>

<to-view-id>

/menu/generalHelp.html

</to-view-id>

</navigation-case>

</navigation-rule>


第一段代碼在標(biāo)簽 from-view-id 中使用了星號(hào),而第二斷代碼甚至根本沒有用from-view-id標(biāo)簽。兩者都可以達(dá)到相同的效果。不過需注重的是,一個(gè)空的from-view-id元素是沒有任何效果的,例如:

Code:

<navigation-rule> 

<from-view-id>*</from-view-id>

<navigation-case>

  <from-outcome>

  globalhelp

  </from-outcome>

  <to-view-id>

  /menu/generalHelp.html

  </to-view-id>

</navigation-case>

</navigation-rule>

<navigation-rule>

<from-view-id>*</from-view-id>

<navigation-case>

  <from-outcome>

  globalhelp

  </from-outcome>

  <to-view-id>

  /pages/goaway.html

  </to-view-id>

</navigation-case>

</navigation-rule>


規(guī)則的沖突



這是個(gè)有趣的問題。假如有兩個(gè)相同的 from-view-id ,其包含from-outcome也相同,只是指向不同的頁(yè)面。來看看下一個(gè)例子:

Code:

  <navigation-rule> 


<from-view-id>*</from-view-id>

<navigation-case>

  <from-outcome>

  globalhelp

  </from-outcome>

  <to-view-id>

  /menu/generalHelp.html

  </to-view-id>

</navigation-case>

</navigation-rule>

<navigation-rule>

<from-view-id>*</from-view-id>

<navigation-case>

  <from-outcome>

  globalhelp

  </from-outcome>

  <to-view-id>

  /pages/goaway.html

  </to-view-id>

</navigation-case>

</navigation-rule>


這種情況下,最后一個(gè)規(guī)則將生效。同時(shí)還需注重本文前面提到可以將JSF配置信息置于多個(gè)文件中的情況。從而產(chǎn)生沖突的規(guī)則可能位于不同的配置文件,此時(shí)應(yīng)根據(jù) web.xml 文件中的JSF配置文件列表,在含沖突規(guī)則的配置文件中最后加載的文件中的相關(guān)規(guī)則將會(huì)生效。將一個(gè)導(dǎo)航規(guī)則分開為幾部分,這是同一種效果的不同實(shí)現(xiàn)方式。試比較下面兩段代碼:

Code:

 <navigation-rule> 

<from-view-id>

/pages/inputname.jsp

</from-view-id>

<navigation-case>

<from-outcome>sayHello</from-outcome>

<to-view-id>

/pages/greeting.jsp

</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>

sayGoodbye

</from-outcome>

<to-view-id>

/pages/goodbye.jsp

</to-view-id>

</navigation-case>

</navigation-rule>


Code:

 <navigation-rule> 

 <from-view-id>

 /pages/inputname.jsp

 </from-view-id>

 <navigation-case>

<from-outcome>

sayHello

</from-outcome>

<to-view-id>

/pages/greeting.jsp

</to-view-id>

 </navigation-case>

<navigation-rule>

...

...

<navigation-rule>

<from-view-id>

/pages/inputname.jsp

</from-view-id>

<navigation-case>

<from-outcome>

sayGoodbye

</from-outcome>

<to-view-id>

/pages/goodbye.jsp

</to-view-id>

</navigation-case>


運(yùn)行時(shí)兩者效果相同。不過,第二段代碼顯示規(guī)則聲明可以任意分開后放在配置文件的不同位置,甚至是不同的配置文件中。你可以根據(jù)自己的需要選擇不同的方式。在action中使用導(dǎo)航規(guī)則。現(xiàn)在,該看看如何將前面所學(xué)內(nèi)容應(yīng)用于程序中了。下面便是一個(gè)JSP頁(yè)面可能包含的代碼:

Code:

<h:commandButton 

id="submit"

action="sayHello"

value="Submit" />


action屬性值將被用作一個(gè)輸出(outcome)。這里是另一種方式:

Code:

<h:commandButton id="submit" 

action="#{GetNameBean.helloAction}"

value="Submit" />



這意味著將調(diào)用GetNameBean的helloAction方法,該方法運(yùn)行的結(jié)果將成為一個(gè)outcome。注重helloAction必須是一個(gè)返回值為字符串的public方法。

上面兩種不同action屬性值的寫法區(qū)別在考慮到配置文件中的一個(gè)標(biāo)簽時(shí)將比較重要,這個(gè)標(biāo)簽便是 from-action 標(biāo)簽,我們前面還未提及。請(qǐng)參考下面代碼:

Code:

 <navigation-rule> 

<from-view-id>

/pages/inputname.jsp

</from-view-id>

<navigation-case>

<from-outcome>sayHello</from-outcome>

<to-view-id>

/pages/anotherhello.jsp

</to-view-id>

</navigation-case>

<navigation-case>

<from-action>

#{GetNameBean.helloAction}

</from-action>

<from-outcome>sayHello</from-outcome>

<to-view-id>

/pages/hello.jsp

</to-view-id>

</navigation-case>

</navigation-rule>


在這段代碼中,兩個(gè)navigation cases均含有相同的 from-view-id 以及 from-outcome 元素,不過第二個(gè)navigation case包含一個(gè)from-action元素。假如 sayHello 這個(gè)outcome是通過 GetNameBean.helloAction 產(chǎn)生的話,第二個(gè)navigation case將生效,不過其原因僅僅是除 from-outcome 外兩者具有相同的優(yōu)先級(jí)。

Review

為了檢查您對(duì)本文的理解情況。請(qǐng)看下面例子,在 /pages/inputname.jsp 這頁(yè)面中對(duì)commandButton有一下聲明:

Code:

<h:commandButton id="submit" 

action="#{GetNameBean.helloAction}"

value="Submit" />


而JSF配置文件則包含了一下內(nèi)容:

Code:

 <navigation-rule> 

<from-view-id>

/pages/inputname.jsp

</from-view-id>

<navigation-case>

  <from-outcome>sayHello</from-outcome>

  <to-view-id>/a.jsp</to-view-id>

</navigation-case>

</navigation-rule>

<navigation-rule>

<from-view-id>/pages/*</from-view-id>

<navigation-case>

<from-action>

#{GetNameBean.helloAction}

</from-action>

<from-outcome>sayHello</from-outcome>

<to-view-id>/b.jsp</to-view-id>

</navigation-case>

</navigation-rule>
假如上面頁(yè)面中的提交按鈕被按下,到底跳到/a.jsp還是/b.jsp的哪個(gè)頁(yè)面,假如在GetNameBean.helloAction返回值為sayHello的情況下又如何呢? 留給大家作為思考吧!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 莒南县| 中方县| 郴州市| 连山| 荥经县| 蕉岭县| 封丘县| 盘山县| 察隅县| 吴忠市| 遵义县| 永平县| 内江市| 安阳县| 句容市| 博湖县| 新密市| 福海县| 上思县| 专栏| 郯城县| 社旗县| 德兴市| 扶沟县| 蒙阴县| 东乌珠穆沁旗| 安吉县| 邓州市| 乐安县| 太谷县| 昭通市| 绩溪县| 庄浪县| 兰考县| 山丹县| 廉江市| 涪陵区| 丰都县| 霍山县| 阿城市| 化德县|