JSF Composite Component参数更新

时间:2014-11-25 10:18:10

标签: java jsf jsf-2 primefaces composite-component

您好我创建了构建动态表单的复合组件。 我将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>

1 个答案:

答案 0 :(得分:0)

这是stateHelper问题,我将这些属性存储在组件初始化中,在一个支持bean中使用:

getStateHelper().put("formObject", formObject);
getStateHelper().put("formDataObject", formDataObject);

结果表明,在您尝试再次设置状态助手之前清除状态助手中的所有属性之前,它会阻止他们更新更新。

getStateHelper().remove("formObject");
getStateHelper().remove("formDataObject");