2013-08-15 9 views
2

Всплывающее окно (Richfaces) с собственной формой предоставляет кнопку сохранения, которая должна выполнять другую форму (contentForm) и не пересылать, если происходит сбой проверки.Почему проверка не выполняется во второй форме?

Однако, saveHandler.forward() всегда вызывается ... любые идеи?

<a4j:commandButton 
    id="saveContentChanges" 
    value="Speichern" 
    action="#{cc.attrs.handler.save()}" 
    type="submit"> 
    <a4j:ajax 
     execute=":contentForm" 
     render=":contentForm" 
     oncomplete="if (#{!facesContext.validationFailed}) { saveHandler.forward() } else { #{rich:component('contentSaveHandlerPopup')}.hide() }" 
     onerror="errorHandler.onError(event.description); #{rich:component('contentSaveHandlerPopup')}.hide();" /> 
</a4j:commandButton> 

PS. Этот код находится в составном компоненте. Я не получаю никаких ошибок на консоли JavaScript.

ответ

2

В HTML может быть отправлена ​​только одна форма, поэтому в вашем случае от клиента к серверу отправляются только данные из формы, в которой находится a4j:commanButton. Атрибут execute влияет только на обработку на стороне сервера, он не меняет способ представления данных. Таким образом, добавление к execute другой формы делает ее фактически обработанной на стороне сервера, но поскольку нет представленных значений, это означает, что ничего не нужно проверять.

Альтернативные решения:

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

  2. Помещенный a4j: Функция JsFunction в contentForm и вызывать его из всплывающего окна, код будет выглядеть следующим образом:

.

<h:form id="contentForm"> 
    .. other fields to be submitted .. 
    <a4j:jsFunction name="executeContentFormAction" execute="@form" render="@form" 
     action="#{...}" 
     oncomplete="if ..."/> 
</h:form> 

... 

<a4j:commandButton 
    id="saveContentChanges" 
    value="Speichern" 
    onclick="executeContentFormAction(); return false;"> 
+0

Спасибо, Андрей! Кроме того, мне пришлось скрывать всплывающее окно с 'onbeforesubmit', иначе он тоже не работал. Но теперь он работает отлично. –

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

  • Нет связанных вопросов^_^