<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 閱讀(2349) 評論(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。

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

    主站蜘蛛池模板: 亚洲成人免费在线| 亚洲乱亚洲乱妇无码麻豆| 亚洲国产精品综合久久久| 国产一区二区三区免费| 亚洲欧洲∨国产一区二区三区| 人成午夜免费大片在线观看| mm1313亚洲国产精品美女| 日日躁狠狠躁狠狠爱免费视频 | 2021在线永久免费视频| 亚洲精品自产拍在线观看动漫| 久久久久久成人毛片免费看| 亚洲天堂中文资源| 性xxxxx免费视频播放| 亚洲中文字幕无码久久2020| 免费观看一级毛片| 久久亚洲精品无码网站| 亚洲国产精品尤物yw在线| 在线免费观看伊人三级电影| 亚洲欧洲在线观看| 免费99精品国产自在现线| 丰满亚洲大尺度无码无码专线 | 9久久免费国产精品特黄| 精品亚洲一区二区| 一二三四影视在线看片免费 | 一级毛片完整版免费播放一区| 亚洲精品少妇30p| 1000部拍拍拍18勿入免费视频软件| 亚洲视频一区二区三区四区| 免费国产真实迷j在线观看| 三上悠亚电影全集免费| 亚洲系列国产精品制服丝袜第| 日韩一级视频免费观看| 精品熟女少妇aⅴ免费久久| 亚洲精品中文字幕乱码影院| 暖暖在线日本免费中文| a级毛片免费高清毛片视频| 狠狠色伊人亚洲综合网站色| 精品亚洲视频在线观看| 成人免费观看一区二区| 四虎影视在线看免费观看| 亚洲国产午夜精品理论片|