【问题标题】:JSF Composite Component argument updateJSF 复合组件参数更新
【发布时间】:2015-01-23 07:06:22
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这是 stateHelper 的问题,我将这些属性存储在组件初始化时,使用:

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

    事实证明,它会阻止它们在更新时更改,直到您从 State Helper 清除所有属性,然后再尝试再次设置它们。

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

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2018-06-05
      • 2011-03-06
      • 2012-06-08
      相关资源
      最近更新 更多