2012-03-17 2 views
3

Как я могу вызвать метод из бэк-компонента перед всплывающей панелью?Всплывающая панель Richfaces

<h:commandButton value="Call the popup" action="#{bean.doSomething}" > 
    <rich:componentControl target="popup" operation="show" /> 
</h:commandButton> 

<rich:popupPanel id="popup" modal="true" resizeable="true" onmaskclick="#{rich:component('popup')}.hide()"> 
    ... 
</rich:popupPanel> 

В этом случае йоЗотеЬЫпд() метод не вызывает.

ответ

5

гнездо a4j:ajax в commandButton или использовать a4j:commandButton. Эти два компонента имеют oncomplete атрибут, где вы могли бы поставить код, который открывает всплывающее диалоговое окно, как это:

<a4j:commandButton value="Call the popup" action="#{bean.doSomething}" oncomplete="#{rich:component('popup')}.show()"> 
</a4j:commandButton> 

Это будет выполнять запрос AJAX при нажатии на кнопку и откроется всплывающее окно, когда запрос закончен.

+0

Это работает, спасибо :) –

+0

Я мог бы добавить, что если вы хотите повторно загрузить содержимое всплывающего окна в результате действия (например, данные с ленивой загрузкой), вам нужно привязать атрибут render на a4j : тег commandButton. –

1

Вы могли бы просто использовать f:ajax на успешный ответ показать всплывающее окно

Также см

+0

быть немного более подробно о том, где использовать F: Ajax, если я использую F: Ajax, прежде чем богатые: componentControl всплывающей панель не отображается. Вы хотите поставить f: ajax в rich: popupPanel? –

1

Я думаю, вы должны использовать actionListener в этом случае. Действие используется для изменения вида, и я предполагаю, что вы просто хотите показать всплывающее окно.

MAG, Milo

+0

Отрицательный. Целью actionListener является вызов кода на стороне сервера. То, что он хочет/нуждается, - это вызвать клиентский код (который показывает всплывающее окно). –

+0

Я имел в виду его обращение к бэкэнду. Код «doSomething». –

Смежные вопросы