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

Jsf 动态创建的输入组件不显示模型值,jsf,jsf-2,mojarra,icefaces-3,Jsf,Jsf 2,Mojarra,Icefaces 3,我有一些bean字段需要通过编程方式显示。是这样的: HtmlPanelGrid panel = new HtmlPanelGrid(); panel.setColumns(4); HtmlOutputLabel fieldOut = new HtmlOutputLabel(); fieldOut.setId("fieldOutId"); fieldOut.setValue("name");

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

当我点击save按钮并转到下一个视图时,字段“ANOTHERFIELD”已经从bean中获取了值,并正确显示,但是动态生成的字段显示为空。它在支持bean中的值也为null。这就像
ValueExpression
不适用于我在支持bean中创建的
HtmlInputText
。我在Mojarra 2.1.17中使用了IceFaces3.3


这是怎么造成的,我该怎么解决呢?

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

  • 正确的
    setValueExpression
    调用如下:

    fieldIn.setValueExpression("value", UtilFaces.createValueExpression("#newElementBean.fieldName}");
    
    我错误地使用了
    “field1”
    作为第一个参数,而不是
    “value”

  • 这在问题中是不可见的,但是我的
    createValueExpression()
    helper方法也是错误的。以下内容适用于我:

    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);
    }
    

  • 什么时候创建字段?在以前的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的第一个参数必须是“value”。我的第二个错误是我的createValueExpression方法不正确。在这个链接的底部,您将找到适合我的方法。