我有一些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中获取值,并正确显示,但是以dinamically生成的字段显示为空。它在backing bean中的值也是null。这就像ValueExpression
不适用于我在辅助bean中创建的HtmlInputText
。我正在使用Icefaces 3.3和Mojarra 2.1.17。
这是如何引起的?如何解决?
答案 0 :(得分:2)
我解决了。我犯了两个错误:
正确的setValueExpression
电话是这样的:
fieldIn.setValueExpression("value", UtilFaces.createValueExpression("#newElementBean.fieldName}");
我错误地使用"field1"
作为第一个参数而不是"value"
。
这个问题并不容易,但我的createValueExpression()
辅助方法也是错误的。以下内容对我有用:
public static ValueExpression createValueExpression(String expression) {
Application app = FacesContext.getCurrentInstance().getApplication();
ExpressionFactory elFactory = app.getExpressionFactory();
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
return elFactory.createValueExpression(elContext, expression, Object.class);
}