在新項(xiàng)目中,我們要做一個(gè)這樣的功能:有一個(gè)表格,沒(méi)有記錄,當(dāng)用戶(hù)點(diǎn)擊“添加”的時(shí)候,會(huì)生成一條行,里面包含了文本輸入框,下拉框等等,需要用戶(hù)填寫(xiě),以此類(lèi)推,用戶(hù)只要需要,他可以填寫(xiě)無(wú)限條信息,最后點(diǎn)擊一個(gè)“保存”來(lái)保存所有記錄。
這里,我們?yōu)榱颂岣哂脩?hù)的體驗(yàn)性,使用了Ajax技術(shù),后臺(tái)生成一個(gè)HtmlInputText控件實(shí)例添加到指定的panel中,然后刷新表格那一部分顯示出來(lái)。
一上來(lái),我用了這個(gè)方法(添加到監(jiān)聽(tīng)器中):
HtmlInputText text = new HtmlInputText();
panel.getChildren().add(text);
然后當(dāng)填寫(xiě)了值之后調(diào)用了text.getValue()方法,發(fā)現(xiàn)打印出來(lái)的是null,以為JSF無(wú)法捕獲Ajax生成控件的值,又嘗試設(shè)定了Action來(lái)生成控件,發(fā)現(xiàn)還是不行。
最后只好使用了這個(gè)辦法:
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方式還是表單提交的方式都可以使用這個(gè)方法獲得。所以我就在想,這個(gè)是什么原因,直接設(shè)置實(shí)例反而沒(méi)有辦法操作,還要重新獲取才可以。
但是如果你在初始化控件的時(shí)候進(jìn)行text.setValue("111");操作還是可以的,這樣輸入框就會(huì)默認(rèn)出現(xiàn)值111。
大家有什么看法,盡管發(fā)表,如果對(duì)這個(gè)需求有更好的解決方案,也請(qǐng)?zhí)岢鰜?lái),謝謝了。
---------------------------------------------------------
專(zhuān)注移動(dòng)開(kāi)發(fā)
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2008-11-27 17:18
TiGERTiAN 閱讀(2111)
評(píng)論(9) 編輯 收藏 所屬分類(lèi):
Java 、
JSF