【发布时间】:2013-09-06 08:41:03
【问题描述】:
我需要以编程方式显示 bean 的一些字段。是这样的:
HtmlPanelGrid panel = new HtmlPanelGrid();
panel.setColumns(4);
HtmlOutputLabel fieldOut = new HtmlOutputLabel();
fieldOut.setId("fieldOutId");
fieldOut.setValue("name");
panel.getChildren().add(fieldOut);
HtmlInputText fieldIn = new HtmlInputText();
fieldIn.setId("fieldInId");
fieldIn.setPartialSubmit(true);
fieldIn.setValueExpression(
"field", UtilFaces.createValueExpression("#{newElementBean.fieldName}",String.class));
panel.getChildren().add(fieldIn);
mainForm.getChildren().add(panel);
在 newElements.xhtml 中,我定义了一个绑定到 mainForm 的表单,以这种方式:
<ice:form binding="#{newElementBean.mainForm}">
<ice:inputText id="ANOTHERFIELD" value="#{newElementBean.anotherField}"/>
<ice:commandButton action="#{newElementBean.save}" value="Save"/>
</ice:form>
当我单击保存按钮并转到下一个视图时,“ANOTHERFIELD”字段已从 bean 中获取值,并正确显示,但动态生成的字段显示为空。它在支持 bean 中的值也为空。这就像ValueExpression 不适用于我在支持bean 中创建的HtmlInputText。我正在使用 Icefaces 3.3 和 Mojarra 2.1.17。
这是怎么引起的,我该如何解决?
【问题讨论】:
-
你什么时候创建字段?
-
在之前的 bean 中,我使用 newElementBean = (NewElementBean)UtilFaces.getBean("newElementBean") 获取 bean,然后创建字段并使用 newElementBean.setMainForm(form) 设置为 bean。
-
这些 bean 的范围是 @CustomScoped(value = "#{window}")。我尝试使用 noneScope 或 sessionScope,只是为了查看值是否正确,但没有用。
-
我有消息了。 setValueExpression 错误,第一个参数必须是“value”(fieldIn.setValueExpression("value", UtilFaces.createValueExpression("#newElementBean.fieldName}",String.class)))。尚未解决,目前该字段显示文本“#{newElementBean.fieldName}”。
-
已解决!由于我的声誉,我无法发布答案:-(。简而言之,setValueExpression 的第一个参数必须是“值”。我的第二个错误是我的 createValueExpression 方法不正确。在这个链接的底部,你会找到适合我的方法。
标签: jsf jsf-2 mojarra icefaces-3