您好我创建了构建动态表单的复合组件。 我将3个参数传递给组件支持bean。其中2个是对象。
<p:outputPanel id="dynaForm" >
<p:outputPanel rendered="#{formTest.dynamicForm!=null}" >
Form in parent: #{formTest.dynamicForm.id}<br/>
<cc:dynamicFormComponent
formObject="#{formTest.form}"
formDataObject="#{formTest.recordObject}"
mode="1"
/>
</p:outputPanel>
</p:outputPanel>
静态使用时效果很好,但是当我尝试使用selectOneMenu和更新formObject
面板动态更改属性dynaForm
时,第一次构建表单但是当我尝试更改表单属性时没有更新,它记得第一选择。这只发生在对象属性上,如果我使用它正常变化的字符串。我在面板和复合组件中输出表单的id,似乎复合组件不希望感知更新的值。
以下是组件代码的基础:
<cc:interface componentType="dynamicFormComponentGenerator" >
</cc:interface>
<cc:implementation>
Form in component: #{cc.attrs.formObject.id}
<cc:implementation>
答案 0 :(得分:0)
这是stateHelper问题,我将这些属性存储在组件初始化中,在一个支持bean中使用:
getStateHelper().put("formObject", formObject);
getStateHelper().put("formDataObject", formDataObject);
结果表明,在您尝试再次设置状态助手之前清除状态助手中的所有属性之前,它会阻止他们更新更新。
getStateHelper().remove("formObject");
getStateHelper().remove("formDataObject");