在新项目中,我们要做一个这样的功能:有一个表格,没有记录,当用户点击“添加”的时候,会生成一条行,里面包含了文本输入框,下拉框等等,需要用户填写,以此类推,用户只要需要,他可以填写无限条信息,最后点击一个“保存”来保存所有记录。
这里,我们为了提高用户的体验性,使用了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 阅读(2104)
评论(9) 编辑 收藏 所属分类:
Java 、
JSF