Richfaces poupPanel отображается перед выполнением действия

У меня есть форма JSF 2.0, которая выглядит следующим образом

<h:form id="formId">
.
.
.
       <a4j:commandButton action="#{bean.myAction}" value="foo"  oncomplete="#{rich:component('popup')}.show();" />
</form>
 <rich:popupPanel id="popup" modal="false" autosized="true"
                              resizeable="false">

                <h:form id="form2">
                    <h:panelGrid columns="1" >               
                            <h:outputText id="idText" value="#{bean.message}" />
                        <h:commandButton action="#" onclick="#{rich:component('popup')}.hide(); return false;" value="ok"/>
                    </h:panelGrid>
                    </h:form>

            </rich:popupPanel>

и метод бобов

 public String action(){
    message = "Some message";
    return "";
}

При нажатии на кнопку "action" и показ всплывающего окна выполняются, но похоже, что вызов всплывающего окна был выполнен первым. Я получаю сообщение от бобового конструктора, а не измененного. Есть ли у вас какие-либо идеи, как отложить действие всплывающего шоу (оно уже находится под атрибутом oncomplete)? Существует ли здесь какой-либо обычный шаблон (действие динамически меняет содержимое всплывающей панели, всплывающее окно должно быть похоже на конечное сообщение). Или, может быть, есть способ вызвать всплывающее окно из кода Java (например, из bean.action)? Спасибо

1 ответ

Решение

Вы должны повторно отрендерить <rich:popupPanel>Сначала содержимое s, в противном случае оно все еще показывает содержимое с первого раза, когда оно было отображено. Именно вы перерисовываете уже отредактированный, но скрытый CSS-контент с помощью JavaScript.

<a4j:commandButton render=":popup:form2" ... />
Другие вопросы по тегам