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

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

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

    隨筆-348  評論-598  文章-0  trackbacks-0
    在新項目中,我們要做一個這樣的功能:有一個表格,沒有記錄,當(dāng)用戶點擊“添加”的時候,會生成一條行,里面包含了文本輸入框,下拉框等等,需要用戶填寫,以此類推,用戶只要需要,他可以填寫無限條信息,最后點擊一個“保存”來保存所有記錄。
     這里,我們?yōu)榱颂岣哂脩舻捏w驗性,使用了Ajax技術(shù),后臺生成一個HtmlInputText控件實例添加到指定的panel中,然后刷新表格那一部分顯示出來。

    一上來,我用了這個方法(添加到監(jiān)聽器中):
    HtmlInputText text = new HtmlInputText();
    panel.getChildren().add(text);
    然后當(dāng)填寫了值之后調(diào)用了text.getValue()方法,發(fā)現(xiàn)打印出來的是null,以為JSF無法捕獲Ajax生成控件的值,又嘗試設(shè)定了Action來生成控件,發(fā)現(xiàn)還是不行。

    最后只好使用了這個辦法:
    HtmlInputText text = new HtmlInputText();
    text.setId(
    "text_1");
    panel.getChildren().add(text);
    獲取方法使用了:
    public void sendMessage(ActionEvent e)
    {
    FacesContext context 
    = FacesContext.getCurrentInstance();
    UIViewRoot view 
    = context.getViewRoot();
    HtmlInputText output 
    =
    (HtmlInputText)view.findComponent(
    "messageForm:text_1");
    System.out.println(output.getValue());
    }
    不管是用Ajax方式還是表單提交的方式都可以使用這個方法獲得。所以我就在想,這個是什么原因,直接設(shè)置實例反而沒有辦法操作,還要重新獲取才可以。
    但是如果你在初始化控件的時候進行text.setValue("111");操作還是可以的,這樣輸入框就會默認出現(xiàn)值111。

    大家有什么看法,盡管發(fā)表,如果對這個需求有更好的解決方案,也請?zhí)岢鰜恚x謝了。

    ---------------------------------------------------------
    專注移動開發(fā)

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2008-11-27 17:18 TiGERTiAN 閱讀(2114) 評論(9)  編輯  收藏 所屬分類: JavaJSF

    評論:
    # re: 探討JSF Backing bean生成控件的問題 2008-11-27 19:22 | Libo
    是否使用binding?如果不使用應(yīng)該是不能得到值的.  回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題 2008-11-27 23:51 | TiGERTiAN
    @Libo
    頁面上面的panel控件使用了binding,綁定到了后臺的一個實例,在后臺我也是對這個實例進行添加子控件的操作,也就是說子控件原來在前臺頁面是什么痕跡都沒有的,完全即時生成,然后我想操作后臺子控件的實例獲取用戶輸入的值就不可以。。  回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題 2008-11-28 07:40 | Libo
    這樣應(yīng)該是在后臺得到panel組件,然后類似于這樣的代碼:
    List l =panel.getValue();
    或是
    panel.getChildren(); 這要根據(jù)panel綁定的是什么組件.
    之后對list 遍歷,得出的是每個組件,然后對組件取值.  回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題 2008-11-28 10:45 | TiGERTiAN
    @Libo
    我也嘗試過了你說的兩種方法,每個控件的實例都得到了,但是調(diào)用每個控件的getValue(),都得不到用戶輸入的值。  回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題 2008-11-28 14:38 | huliqing
    不過我倒是覺得這個功能可以不需要用到ajax.
    使用js在客戶端直接生成子組件,不過這不會直接反映到JSF的組件樹中.可能需要作一些特殊處理,比如擴展一下inputText組件.
    使用action進行生成子組件應(yīng)該會刷新頁面,不過這應(yīng)該是JSF正常的方式,但是你的例子看起來很正常.
    不過我估計可能的問題應(yīng)該是出現(xiàn)了這樣的流程:
    點擊action - 后臺生成子組件(無默認值) - 重新渲染頁面(這時頁面viewState中panel的子組件仍沒有值) - 使用ajax調(diào)用(把無值的viewState帶到了后臺) - 出現(xiàn)以上錯誤!
    呵呵,以上是我對你的錯誤原因的流程猜測.
    不知道你的整個操作過程是怎么樣的.  回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題[未登錄] 2008-11-29 00:08 | David
    很久以前分析過JSF源代碼:)

    JSF每一次Request-Response包含六個階段,其中在response render之前JSF server端有一個component tree,而render就是把這個component tree 生成對應(yīng)的html,這個生成的html(包含form)被提交的時候(另一個request-response),server段重新恢復(fù)一個view。而你的這個sendMessage(apply application values吧,不記得了)發(fā)生在restore之后,所以能夠取到值。

    因為ajax的context根jsf的context屬于不同進程,所以不能ajax的html 不能直接滲透到JSF中訪問component tree。

    我的想法就是
    設(shè)置一個agent駐留在jsf application中,即每個agent實例與每一個jsf request-response在同一分配的thread中,agent可以訪問jsf數(shù)據(jù)。而這個agent有一個http方法,以ajax提供的jsf sessionid為主要參數(shù),用來更新jsf component tree,然后局部遞歸render,把rendered的html代碼加在html中
    。這樣,不管server,還是client都有同結(jié)構(gòu)的tree.

      回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題 2008-11-29 00:35 | TiGERTiAN
    @David
    大概看懂了你的意思,只是不太明確代碼如何編寫,請問您有示例代碼提供給我參考下嗎?謝謝您了。  回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題 2008-11-29 00:42 | TiGERTiAN
    @David
    還有就是,我的流程是后端生成HtmlInputText實例,把這個實例添加到panel中:
    HtmlInputText text = new HtmlInputText();
    panel.getChildren().add(text);
    然后前端調(diào)用Ajax直接渲染出來新的控件,如果后端在聲明實例之后又設(shè)置了setValue("1111"),前端是可以看到剛才設(shè)置的1111的。
    問題就在于,如果我想獲得用戶輸入的數(shù)據(jù),直接調(diào)用剛才生成的實例text的getValue()方法是無法獲得用戶輸入的值的,只能獲得我剛才設(shè)置的1111,我在想可能JSF前端頁面綁定的實例已經(jīng)不是我后端設(shè)置的這個了,是他自己生成的一個HtmlInputText,所以才只能用findComponent方法通過ID找到該控件。  回復(fù)  更多評論
      
    # re: 探討JSF Backing bean生成控件的問題 2008-11-29 01:01 | TiGERTiAN
    @huliqing
    應(yīng)該不是這個原因  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲精品国产电影午夜| 一级做a免费视频观看网站| 四虎影在线永久免费观看| 一级毛片一级毛片免费毛片| 亚洲国产精品成人精品无码区| 亚洲视频在线免费播放| 羞羞漫画页面免费入口欢迎你| 久久久青草青青亚洲国产免观| 一二三四视频在线观看中文版免费| 黄色a三级免费看| 亚洲熟妇无码久久精品| 四虎精品亚洲一区二区三区| 99re热精品视频国产免费| 亚洲高清毛片一区二区| 亚洲今日精彩视频| 免费国产高清视频| 7x7x7x免费在线观看| 无码精品人妻一区二区三区免费| 亚洲欧洲日韩综合| 亚洲中久无码不卡永久在线观看| 国内精品免费麻豆网站91麻豆| 国产精品免费视频观看拍拍| 国产亚洲玖玖玖在线观看| 亚洲Av综合色区无码专区桃色| 国产免费资源高清小视频在线观看| 57pao一国产成永久免费| 一级午夜a毛片免费视频| 亚洲人成网站999久久久综合| 亚洲伊人久久大香线蕉苏妲己| 亚洲精品tv久久久久| 国产麻豆视频免费观看| 久久精品免费观看| 一区二区视频免费观看| 亚洲国产精品99久久久久久| 亚洲国产品综合人成综合网站 | 亚洲av无码一区二区三区乱子伦| 成人无遮挡毛片免费看| 1区2区3区产品乱码免费| 中文字幕乱码一区二区免费| 一级毛片正片免费视频手机看 | 30岁的女人韩剧免费观看|