如何在JSF中从变量bean中分离变量?

时间:2013-09-23 11:44:24

标签: jsf primefaces composite-component

我处于这种情况,我需要将变量传递给某个对话框(在自定义标记组件中),具有该值的字段应该是可编辑的,但该对话框不应该能够修改原始值托管bean。

这就是我调用组件的方式:

<my:aerodromeSelection value="#{fpl.adepIcaoId}" id2="adep"/>

这是复合组件的片段(仅包括相关部分):

<composite:interface>
<composite:attribute name="id2" required="true"/>
<composite:attribute name="value" required="true"/>
</composite:interface>


<composite:implementation>
<p:panelGrid>
     <p:commandButton icon="ui-icon-search" update="#{cc.attrs.id2}_dialog" oncomplete="#{cc.attrs.id2}_dialogAerodrome.show()"/>
</p:panelGrid>


<p:dialog widgetVar="#{cc.attrs.id2}_dialogAerodrome" dynamic="true">
    <p:panelGrid>
        <p:inputText value="#{cc.attrs.value.icaoCode}"/>
    </p:panelGrid>
</p:dialog>
</composite:implementation>

单击按钮后,将显示对话框,我可以编辑该值。问题是,我不希望将值设置为原始变量。 我尝试将值设置为自定义组件的托管bean并使用这些值,但如果我这样做,那么在一个页面中有多个对话框,我总是得到最后一个的值:

<c:set value="#{cc.attrs.value.icaoCode}" target="#{adSearchBB}" property="icaoCode"/>

所以我需要解决两个问题之一:

  • 为什么adSearchBB中的值(RequestScoped,但我也尝试过ViewScoped)在所有对话框中共享
  • 如何“取消绑定”传递给自定义组件的变量

此外,托管bean的范围应该是什么?理想情况下,每个组件需要一个bean。

我正在使用

  • Primefaces 3.5
  • Apache MyFaces 2.1.10

0 个答案:

没有答案