<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進(jìn)步

     

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

    The JavaServer Faces (JSF)的Navigation框架提供了一些導(dǎo)航規(guī)則,可以使您在設(shè)計網(wǎng)站應(yīng)用程序時定義view(大部分是JSP頁面)之間的頁面導(dǎo)航。這些規(guī)則和 其他一些設(shè)置一起定義在JSF配置文件中。該文件的名稱一般是 faces-config.xml 。不過完全可以把這個文件名改成其他名字,甚至可以用多個配置文件來存放相關(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>

    一個簡單的例子

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

    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的兩個輸出(outcomes), sayHello 和 sayGoodbye ,它們分別同特定的頁面相關(guān)聯(lián)。設(shè)置一個默認(rèn)的輸出事件(Outcome Case)

    基本結(jié)構(gòu)很簡單,但是可以在這個基礎(chǔ)在進(jì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>
    <to-view-id>
    /pages/goodbye.jsp
    </to-view-id>
    </navigation-case>
    </navigation-rule>

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

    利用模式

    JSF的navigation模型允許我們利用模式(patterns)。這些模式有一個以星號“*”結(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的頁面。注意星號一定要放在最后。例如一個類似 / pages/*.jsp 的模式是無效的。

    Resolving More Than One Matching Rule

    現(xiàn)在我們來細(xì)察一下JSF導(dǎo)航模型中該如何處理多個規(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>

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

    "Global" Outcomes

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

    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 中使用了星號,而第二斷代碼甚至根本沒有用from-view-id標(biāo)簽。兩者都可以達(dá)到相同的效果。不過需注意的是,一個空的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>

    規(guī)則的沖突

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

    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ī)則將生效。同時還需注意本文前面提到可以將JSF配置信息置于多個文 件中的情況。從而產(chǎn)生沖突的規(guī)則可能位于不同的配置文件,此時應(yīng)根據(jù) web.xml 文件中的JSF配置文件列表,在含沖突規(guī)則的配置文件中最后加載的文件中的相關(guān)規(guī)則將會生效。將一個導(dǎo)航規(guī)則分開為幾部分,這是同一種效果的不同實現(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)行時兩者效果相同。不過,第二段代碼顯示規(guī)則聲明可以任意分開后放在配置文件的不同位置, 甚至是不同的配置文件中。你可以根據(jù)自己的需要選擇不同的方式。在action中使用導(dǎo)航規(guī)則。現(xiàn)在,該看看如何將前面所學(xué)內(nèi)容應(yīng)用于程序中了。下面便是 一個JSP頁面可能包含的代碼:

    Code:

    <h:commandButton 
    id="submit"
    action="sayHello"
    value="Submit" />

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

    Code:

    <h:commandButton id="submit" 
    action="#{GetNameBean.helloAction}"
    value="Submit" />

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

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

    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>

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

    Review

    為了檢查您對本文的理解情況。請看下面例子,在 /pages/inputname.jsp 這頁面中對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>

    如果上面頁面中的提交按鈕被按下,到底跳到/a.jsp還是/b.jsp的哪個頁面,如果在GetNameBean.helloAction返回值為sayHello的情況下又如何呢? 留給大家作為思考吧!我
    將在下一文章中公布答案,歡迎大家對我的支持!

    posted on 2008-07-25 12:56 找個美女做老婆 閱讀(233) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品国产麻豆免费人成网站| 一级做a爰片久久毛片免费看 | 亚洲欧洲中文日韩久久AV乱码| 亚洲aⅴ无码专区在线观看春色| 无码人妻一区二区三区免费| 亚洲一区二区三区无码国产| 91麻豆最新在线人成免费观看| 亚洲乱码日产精品BD在线观看| 国产精品入口麻豆免费观看| 亚洲无圣光一区二区| 99热在线精品免费全部my| 亚洲综合精品伊人久久| 日本免费观看网站| 色婷婷综合缴情综免费观看| 国产专区一va亚洲v天堂| 青柠影视在线观看免费高清| 久久丫精品国产亚洲av不卡| 日本妇人成熟免费中文字幕| 亚洲AV日韩AV永久无码色欲| 亚洲欧洲中文日韩av乱码| 久草免费手机视频| 亚洲不卡1卡2卡三卡2021麻豆| 日本免费v片一二三区| 爱情岛论坛免费视频| 亚洲AV无码国产精品麻豆天美| 国产91色综合久久免费分享| 亚洲精品精华液一区二区| 亚洲视频在线免费| 91成人免费观看| 亚洲国产一区二区三区在线观看| 亚洲一区无码精品色| 久久午夜夜伦鲁鲁片无码免费| 亚洲日本在线电影| 亚洲精品你懂的在线观看| 在线观看视频免费完整版| 日韩免费码中文在线观看| 久久青青草原亚洲AV无码麻豆| 妞干网免费视频观看| 黄色网站软件app在线观看免费| 亚洲成a人片在线观看精品| 国产精品亚洲mnbav网站 |