2015-02-25 3 views
0

У меня есть кнопка (Make Popup Visible), которая делает всплывающее окно видимым. Когда форма отправляется (Отправить форму), сообщение об ошибке иногда может появляться в поле h: messages, которое ожидается.Как очистить h: сообщения в диалоге ace: после события ajax?

Моя проблема заключается в том, что когда я закрываю всплывающее окно (Make Popup Invisible), а затем снова открываю его (Make Popup Visible), поле h: messages по-прежнему заполняется старым сообщением об ошибке.

Есть ли способ, по которому я могу очистить сообщения, когда нажата кнопка «Сделать всплывающее окно»? Я не хочу делать полную страницу для этого.

Кнопка видимости:

<h:form id="mainForm"> 
    <h:commandButton value="Make Popup Visible"> 
     <f:ajax listener="#{controller.prepareDelete(item)}" render=":deleteItemPopup"/> 
    </h:commandButton> 
</h:form> 

Всплывающие:

<ace:dialog id="deleteItemPopup" visible="#{controller.deleting}"> 
    <h:panelGroup rendered="#{controller.deleting}" layout="block"> 
     <h:messages for="deleteItemPopupForm"/> 
     <h:form id="deleteItemPopupForm">         

      <ui:insert name="content"> 
       This contains a form which, when submitted, can cause 
       an error message to be created and populate the h:messages 
       field 
      </ui:insert> 

      <h:commandButton value="Submit The Form" action="#{controller.delete}"/> 
      <h:commandButton value="Make Popup Invisible"> 
       <f:ajax listener="#{controller.cancel}" render=":deleteItemPopup"/> 
      </h:commandButton> 

     </h:form> 
    </h:panelGroup> 
</ace:dialog> 

Команды:

public void prepareDelete(Item item) { 
    deleting = true; 
} 

public void cancel() { 
    deleting = false; 
} 

public void delete() { 
    . 
    . 
    . 
    } catch (MyException ex) { 
     FacesUtils.sendMessage("deleteItemPopupForm", ex); 
    } 

}

+0

двухкомпонентный немного JQuery или простой JavaScript, вы можете легко удалить содержимое на диалоговом Г события закрытия – Kukeltje

+0

Да, но я бы предпочел сделать это «способ JSF» ... даже если он включал управление вещами в бэк-файле с FacesContext или что-то в этом роде. – wsaxton

+0

Это действительный способ jsf ... компоненты туза выполняют много операций jquery за кулисами. Путь jsf был бы: в событии закрытия диалога, выполнить удаленный вызов на сервер (например, с помощью [omnifaces commandScript] (http://snapshot.omnifaces.org/components/commandScript) и в этой команде обновить панель или но это требует сервер roundtrip – Kukeltje

ответ

0

Похоже ICEfaces делает некоторые специальные вещи с сообщениями:

http://www.icesoft.org/JForum/posts/list/19753.page#71521

Я добавил это в мой файл web.xml и сообщения теперь уходят:

<context-param> 
    <param-name>org.icefaces.messagePersistence</param-name> 
    <param-value>false</param-value> 
</context-param>