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