Динамическая передача компонента в rich: PopupPanel

#jsf-2 #richfaces

#jsf-2 #richfaces

Вопрос:

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

Комментарии:

1. ваша версия richfaces и версия jsf с фрагментом кода были бы полезны 🙂

Ответ №1:

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

  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>