动态创建的输入组件不显示模型值

时间:2013-09-03 07:43:43

标签: jsf jsf-2 mojarra icefaces-3

我有一些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。

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:2)

我解决了。我犯了两个错误:

  1. 正确的setValueExpression电话是这样的:

    fieldIn.setValueExpression("value", UtilFaces.createValueExpression("#newElementBean.fieldName}");
    

    我错误地使用"field1"作为第一个参数而不是"value"

  2. 这个问题并不容易,但我的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);
    }