【问题标题】:Dynamically created input components do not show model values动态创建的输入组件不显示模型值
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2020-07-29
    • 2020-06-18
    • 2015-12-01
    • 2019-06-29
    相关资源
    最近更新 更多