嗨,我已经创建了一个复合组件,它构建了一个动态表单。我将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和更新dynaForm面板动态更改属性formObject时,它第一次构建表单时,但当我尝试更改表单时,属性没有更新,它会记住第一个选择。这只发生在对象属性上,如果我使用字符串,它会正常改变。我在面板和复合组件中输出表单的id,复合组件似乎不想感知更新后的值。
以下是组件代码的基础:
<cc:interface componentType="dynamicFormComponentGenerator" >
</cc:interface>
<cc:implementation>
Form in component: #{cc.attrs.formObject.id}
<cc:implementation>发布于 2014-11-25 23:02:08
这是stateHelper的问题,我将这些属性存储在组件初始化中,在支持bean中使用:
getStateHelper().put("formObject", formObject);
getStateHelper().put("formDataObject", formDataObject);事实证明,它会阻止它们在更新时更改,直到您在尝试再次设置它们之前清除状态辅助对象中的所有属性。
getStateHelper().remove("formObject");
getStateHelper().remove("formDataObject");https://stackoverflow.com/questions/27123995
复制相似问题