0

我处于一种情况,我需要将变量传递给某个对话框(在自定义标记组件中),具有该值的字段应该是可编辑的,但该对话框不应该能够修改托管 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
4

0 回答 0