Динамически передавая bean в rich: popupPanel - PullRequest
1 голос
/ 14 мая 2011

У меня есть базовый класс, который является нормальным классом Java. Расширяют его три подкласса, которые являются @ViewScoped бобами. Там facelet с использованием динамической переменной. У меня есть три xhtml страницы, которые используют эти лицевые стороны с тремя бобами, а именно. bean1, bean2 and bean3, которые динамически включаются в компонент rich:tab на главной странице. Все идет нормально. Но на каждой странице есть несколько всплывающих окон, которые должны ссылаться на текущий компонент. И поскольку эти всплывающие окна нуждаются в теге form внутри них, я включил их вне тегов формы главной страницы, чтобы избежать вложенных тегов form. Теперь я хочу, чтобы всплывающее окно ссылалось на текущий bean-компонент (bean1, bean2 или bean3, в зависимости от того, откуда вызывается всплывающее окно). Как мне этого добиться?

1 Ответ

0 голосов
/ 01 апреля 2012

Попробуйте что-то вроде этого:

  1. Добавьте новый компонент (popupBean), который будет содержать ссылку на текущий компонент в всплывающем окне.

  2. Добавьте действие, которое установит необходимый бин как свойство popupBean.Пример:

    <h:commandLink>
        <a4j:ajax render="myPopup"/>
        <f:setPropertyActionListener target="#{popupBean.currentBean}" value="#{bean1}"/>
        <h:outputText value="Click ME!"/>
    </h:commandLink>
    
  3. Используйте атрибут show для rich:popupPanel, чтобы показать всплывающее окно:

    <rich:popupPanel id="myPopup" modal="true" width="600" moveable="true" 
            show="#{not empty popupBean.currentBean}" onmaskclick="#{rich:component('myPopup')}.hide();" autosized="true">
        <f:facet name="header"><h:outputText value="Cool popup!"/></f:facet>
        <h:panelGrid style="margin: 0">
            <h:panelGroup style="max-height: 400px;overflow-y: auto;" layout="block">
                <h:outputText value="#{popupBean.currentBean.myBeanProperty}"/>
            </h:panelGroup>
            <h:button value="Close" onclick="#{rich:component('myPopup')}.hide();return false;"/>
        </h:panelGrid>
    </rich:popupPanel>
    
...