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

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

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

    amp@java

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks
        JSF只能采用POST的方法進行FORM提交,同一頁面要顯示不同的內容,只有通過POST來改變參數或者通過SESSION傳遞變量。有時候有大量相似的頁面,這些頁面只有很少一部分不同(例如不同用戶、不同角色、不同頁碼等),通過跟在URL后面的query string本來可以很容易地實現,但在JSF里卻不行,只要一提交,馬上就把?后面那串東西丟掉。假如有一個頁面,根據URL后面的id參數來顯示FORM的內容,提交的時候如果驗證出錯,那個FORM的內容就丟失了,顯示一個莫名其妙的頁面,因為這時候那個id參數已經沒有了。還有常用的分頁操作,本來在URL后面加上個頁碼就可以了,但是JSF的分頁控件卻只能通過POST來翻頁,一刷新就出來個“重試”“取消”的對話框,讓人煩惱。如果頁面內容根據不同用戶角色有細微不同,就得每個角色建立一個頁面,每個頁面對應一個managed bean,這些頁面的內容基本相同,bean的內容也基本相同,卻要分別建立,一點重用的機會都沒有。今天做的一個東西就遇到了這種問題:
    一個簡單的審批流程,只有3個角色,申請者、審批者、執行者,整個流程是這樣的:申請者填單->審批者查看并審批->執行者執行并填入結果->申請者查看。這樣,每種角色都有兩種列表:未回復和已回復,這兩種列表在三個角色里面都是相似的,但有細微區別:
    申請者 審批者 執行者
    未回復列表 自己已發出但未被執行者執行的列表 申請者已提交但自己未審批的列表 審批已通過但自己未執行的列表
    已回復列表 自己已發出且執行者已執行的列表 申請者已提交且自己已審批的列表 審批已通過且自己已執行的列表

    這些列表的不同之處在于:已登錄用戶的角色(可以從session中得到,但一個用戶可能有多種角色,他可能以不同的角色查看列表),列表的當前狀態(對每種角色都有兩種狀態),列表的頁碼。由于每個列表都有可能有大量數據,所以必須用到分頁。通過JSF的DataTable空間和DataScroller控件可以簡單地實現分頁,然而,這種分頁導致URL后面的參數無效了,這樣一來,這六種列表就必須通過6個頁面來顯示了,通過頁面的名稱來區分當前用戶的角色、所查看的列表的狀態,每個頁面通過POST來決定頁碼。本來一個頁面+一個bean+3個參數就可以決定,現在需要6個頁面+6個bean來完成了。

    list.jsp?type=0&role=0&page=1->type0_role0.jsp
    list.jsp?type=0&role=1&page=1->type0_role1.jsp
    list.jsp?type=0&role=2&page=1->type0_role2.jsp
    list.jsp?type=1&role=0&page=1->type1_role0.jsp
    list.jsp?type=1&role=1&page=1->type1_role1.jsp
    list.jsp?type=1&role=2&page=1->type1_role2.jsp

    假如有n種狀態m種角色那豈不是要n*m個頁面+n*m個bean?

    有點想放棄JSF這個雞肋了。

    希望有高手給條生路走走!
    posted on 2008-06-04 19:48 amp@java 閱讀(2350) 評論(11)  編輯  收藏 所屬分類: JSF

    評論

    # re: 缺少GET的JSF令人郁悶 2008-06-04 22:45 小武
    也不至于就為了這個而放棄JSf吧,呵呵
    http://www.laoge.info
      回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-05 08:42 HiMagic!
    要看JSF給你帶了哪些好處,然后權衡一下是否值得,說實在的,我不反對這些框架,但還是覺得自己寫的簡易框架好,因為是量身定做的。各種框架的設計思想是我們的借鑒之處,但我們卻不一定要上他的船。  回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-05 11:01 Always BaNg.
    根本上就沒有搞懂JSF!!

    UI只是model的直接顯示。

    定義一個bean,bean里面包含兩個屬性
    class MyBean
    {
    private Role role; //角色
    private int type; //未回復,已回復
    public List getWorkList()
    {
    if (role == AuditRole)
    ....
    if (type == 0)
    . ..
    return list; //最后提供給DataTable顯示的列表
    }
    }

    然后注冊這個bean,在datatable里面 value=#{bean.workList}

      回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-05 17:15 隔葉黃鶯
    JSF 不會不支持 Form 的 GET 吧,那這樣的話,對 RESTful 就沒法支持了  回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-05 20:13 amp@java
    @Always BaNg.

    請問role和type的值從哪里獲取呢?  回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-05 20:15 amp@java
    @隔葉黃鶯

    JSF的確不支持FROM的get,<h:form>里沒有method這個屬性。但是通過managed bean可以獲取query string 里的參數值,只不過一提交就把參數丟掉了
      回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-06 09:17 Always BaNg.
    我可以給一個完全滿足你需要的完整jsf例子,程序總是有辦法的,關鍵是跳出思維圈、。  回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-07 12:57 Always BaNg.
    留下你的email 地址,我給你發過去demo,運行之后你就明白了,或者加我的msn: step.in@hotmail.com。當時搞工作流的時候很深入的修改過JSF,現在不搞了,但我覺得web framework中jsf是最強大的,也最難,因為思維和以往的web開發模式不連續。

    JSF的核心就是基于一系列關聯的request-response短期context,構造出一個面向應用的context即facecontext,其中的重點就是這一系列request-response交互的時候狀態(state)保存的問題。

    在做單個圖形界面開發的時候,比如swing的jframe,我們根本不用考慮參數,狀態的存取問題,因為它在process address space中,狀態保存的地方和根據狀態執行某個操作的方法在同一個scope中,而web開發就不是,一個request-response(體現在form submit中)中保存狀態,而另外一個requst-reponse需要根據前一個request-response的狀態來執行某個操作。

    你碰到也是這個問題,想當然的利用query string來傳遞,但jsf不支持get,jsf提供了不只比get好很多倍的方法,那就是直接放到model中,page里面的control如select/input等直接跟model綁定。

    還有一點,JSF不支持GET,但支持Query String,比如你在某個form里面這么寫
    <h:form action="foobar.jsf?a=1&b=2">

    </h:form>

    通過facecontext.getExternalContext().getRequestParameterMap().
    是能獲取到參數a和b的值得。

      回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-10 09:38 amp@java
    @Always BaNg.
    您好,我的郵箱amplifier2000##163.com
    還望賜教,感謝!  回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-10 09:43 amp@java
    @Always BaNg.
    還有一點,JSF不支持GET,但支持Query String,比如你在某個form里面這么寫
    <h:form action="foobar.jsf?a=1&b=2">

    </h:form>

    通過facecontext.getExternalContext().getRequestParameterMap().
    是能獲取到參數a和b的值得。

    ——————————————————————

    <h:form>是沒有action這個屬性的啊,只能提交到本身,并不能提交到其他頁面,強行指定之后也是提交到本身,而且會把后面的querystring丟掉。  回復  更多評論
      

    # re: 缺少GET的JSF令人郁悶 2008-06-11 10:35 Always BaNg.
    不好意思,搞錯了,應該是<form>的action屬性,或者自定義h:form。

    例子發過去了。  回復  更多評論
      

    主站蜘蛛池模板: 无码日韩精品一区二区三区免费| 偷自拍亚洲视频在线观看| 久草免费福利视频| 亚洲日本va中文字幕久久| a毛片成人免费全部播放| 亚洲免费日韩无码系列| 国产黄在线播放免费观看| 精品国产亚洲男女在线线电影| 一个人看的免费视频www在线高清动漫| 免费大片在线观看网站| 国产乱子伦精品免费视频| 国产亚洲A∨片在线观看| 成人电影在线免费观看| 亚洲国产日韩一区高清在线| 1000部夫妻午夜免费 | 国产亚洲福利精品一区| 无码国产精品一区二区免费3p| 亚洲视频一区调教| 野花高清在线观看免费完整版中文| 亚洲日本一线产区和二线| 亚洲第一视频在线观看免费| 久久国产免费直播| 亚洲国产一区在线| 我想看一级毛片免费的| 男女猛烈激情xx00免费视频| 国产精品亚洲片在线| 在线观看免费人成视频色9| 美女视频黄a视频全免费网站色 | 亚洲AV综合色区无码二区偷拍| 免费无码A片一区二三区| 美国免费高清一级毛片| 日本亚洲视频在线| 大学生高清一级毛片免费| 国产日韩AV免费无码一区二区三区 | 亚洲精品日韩一区二区小说| 亚洲午夜AV无码专区在线播放| **aaaaa毛片免费| 高潮毛片无遮挡高清免费视频| 亚洲av无码成h人动漫无遮挡| 成人毛片18女人毛片免费| 中文字幕在线免费视频|