隨筆 - 170  文章 - 536  trackbacks - 0
          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          我參與的團(tuán)隊(duì)

          隨筆分類(103)

          搜索

          •  

          積分與排名

          • 積分 - 413923
          • 排名 - 135

          最新評論

          閱讀排行榜

          Myfaces 和 Sun RI 表現(xiàn)出了兩種不同的頁面之間的導(dǎo)航方式,即:
          1. Forwarding
          2. Redirection

          第一種方式并不是很好,問題在于 forwarding 將 request 轉(zhuǎn)交但是并沒有把新的URL通知給客戶端,這樣就會(huì)造成兩種問題:
          1. 這樣看到的 URL 不一定是真實(shí)用到的 URL;
          2. 刷新頁面的時(shí)候,讀取的是上一個(gè)頁面。

          大部分傳統(tǒng)的 Web 應(yīng)用的公司會(huì)首選使用 redirection 方法,但 redirection 效率有些低,因?yàn)樗褂昧藘纱?request。

          另外,當(dāng)在 JSF 中使用 forwarding 技術(shù),程序員大概就需要通過以下方法來傳遞參數(shù):
          1. 作為 f:param tag
          2. 在 request 作用范圍設(shè)值

          但這樣還會(huì)帶來以下的問題:
          1. 在頁面之間傳遞參數(shù)通過以下兩種方式: request 參數(shù)、request 作用范圍值。最好采用一種統(tǒng)一的方式來處理這些參數(shù),否則就很難處理從多個(gè)不同的地方訪問該頁面的情況。
          2. redirection 的方法并沒有將這些 request 中的值傳遞到下個(gè)頁面。

          因此(也是為了解決復(fù)雜的動(dòng)態(tài)導(dǎo)航的問題),假定 redirection 是首選的導(dǎo)航方案,我們就需要實(shí)現(xiàn)一個(gè)自定義導(dǎo)航處理程序,并使其具備以下的能力:
          1. 可以自定義 redirection 到任何一個(gè)頁面: 這樣我們就可以直接在 return 中直接寫一個(gè)我們想要導(dǎo)航的頁面作為返回值,緊接著,導(dǎo)航處理程序?qū)?huì)直接將頁面轉(zhuǎn)向到這個(gè)頁面,例如:

            function String saveAction()
            {
              ..
              ..
              return "redirect:save_ok.jsp"
            }

          我們在返回時(shí)指定了一個(gè)前綴 "redirect:" 用以表明我們將要直接轉(zhuǎn)向一個(gè)頁面。這里我們將只能使用相對路徑。

          當(dāng)動(dòng)態(tài)的 URL 參數(shù)傳入時(shí):這樣允許在頁面間傳遞參數(shù)即便是用了 redirection 方式。
          例如,為了從一個(gè)叫做 view.jsp 的頁面導(dǎo)航到一個(gè) edit.jsp,并傳遞了參數(shù) objectId,我們將可以通過以下方式來配置這樣的規(guī)則:

            <navigation-rule>
              <from-view-id>/view.jsp</from-view-id>
              <navigation-case>
                <from-outcome>edit</from-outcome>
                <to-view-id>/view.jsp?objectId=#{view.objectId}</to-view-id>
                <redirect />
              </navigation-case>
            </navigation-rule>

          在 view.jsp 文件中,我們使用這樣的 command link 來導(dǎo)航:   <h:commandLink value="Edit" action="edit" />

          當(dāng)然這只是一個(gè)設(shè)想,現(xiàn)在 JSF 還需要做很多事情才能進(jìn)行正常的開發(fā),這也只有通過慢慢的積累才能夠達(dá)到的。

          posted on 2006-04-25 21:24 steady 閱讀(2572) 評論(1)  編輯  收藏 所屬分類: JSF & Myfaces

          FeedBack:
          # re: JSF 自定義導(dǎo)航處理程序 2008-02-02 11:42 ghost
          可以通過自定義NavigationHandler來隨意進(jìn)行redirect或者forward  回復(fù)  更多評論
            
          主站蜘蛛池模板: 黎平县| 会泽县| 汕头市| 白城市| 平定县| 德昌县| 巴中市| 留坝县| 渭源县| 丰台区| 延庆县| 灵寿县| 乌拉特前旗| 合山市| 会同县| 阜新市| 岳普湖县| 长宁县| 河曲县| 麟游县| 逊克县| 东莞市| 敦化市| 花莲县| 郴州市| 板桥市| 常州市| 梧州市| 谢通门县| 恩平市| 双桥区| 绥德县| 中西区| 长岭县| 三门县| 马鞍山市| 武平县| 胶南市| 正镶白旗| 临朐县| 泊头市|