Как найти индикацию ошибки проверки (required = “true”) при выполнении команды ajax

У меня есть форма внутри диалогового windows, которое я закрываю, нажимая на commandbutton с ajax,

как это

   

и вот код js для закрытия диалога

  function closeAddNewSomethingDialogIfSucceeded(data) { if(data.status === 'success') { $("#dialog_id").dialog("close"); } } 

Нет проблем до сих пор …

Теперь я изменил некоторые поля формы диалога на required="true" и теперь я хочу предотвратить закрытие диалогового windows, в котором я получил ошибки проверки …

Но ajax data.status все еще достигает своего состояния success , и я не могу понять, какой признак ошибки проверки я могу подключить …

есть идеи?

Благодаря ответу BalusC я сделал следующее:

в JSF, добавлено:

     

f: ajax был изменен на

 <f:ajax render="@form someTable global_flag_validation_failed_render" 

и в js добавлена ​​следующая проверка

 if(data.status === 'success') { if($("#global_flag_validation_failed").length === 0){ $("#dialog_id").dialog("close"); } } 

Не required="true" для required="true" , но вы можете проверить #{facesContext.validationFailed} если валидация вообще не удалась. Если вы совпадаете с этим, проверяя, нажата ли кнопка, #{not empty param[buttonClientId]} , вы можете объединить ее в атрибут следующим образом:

     $("#dialog_id").dialog("close");  

(обратите внимание, что вам нужно убедиться, что сценарий также повторно отображается f: ajax)

Немного взломанный, но его невозможно обработать в функции onevent поскольку стандартная реализация JSF не предоставляет никакой информации о состоянии проверки в ответе ajax.

Если вы используете RichFaces, вы можете просто использовать EL в атрибуте кнопки / ссылки команды . Они оцениваются по принципу «за запрос», а не на основе представления, как в стандартных JSF и PrimeFaces:

  

Или, если вы используете PrimeFaces, вы можете воспользоваться тем фактом, что PrimeFaces расширяет ответ ajax с дополнительным атрибутом args.validationFailed который вводится прямо в область JavaScript атрибута oncomplete :

  

(обратите внимание, что & используется вместо & , поскольку & является специальным символом в XML / XHTML)

Или вы можете использовать API RequestContext PrimeFaces в методе действия компонента для программного выполнения JavaScript в визуализированном представлении.

 RequestContext.getCurrentInstance().execute("$('#dialog_id').dialog('close')"); 

Никаких условных проверок не требуется, поскольку метод действия компонента не будет вызываться в любом случае, если проверка не выполнена.

Две вещи: 1) Проверка ошибки в функции «onevent»

У вас есть тег сообщения для обязательного поля?

  

Таким образом, вы можете проверить class ошибок как-то вроде

 var message = $('#m-my-field-id'); if(message.hasClass('error-class'){ //do this } else{ //do that } 

2) DOM не в курсе успеха

Да, я вижу сообщение на странице в Firefox, но jQuery говорит мне, что его нет.

Я обнаружил, что использование наименьшего возможного таймаута достаточно, чтобы исправить это

 setTimeout( function(){ setErrorStyle(source.attr('id')); }, 1 ); 

Я думаю, вам стоит взглянуть на RequestContext PrimeFaces. Это поможет вам инициировать клиентский код на стороне сервера.

  • Получить текущую страницу программно
  • PrimeFaces валидатор не запущен
  • JSF Просмотр области в Spring
  • Как обрабатывать параметры URL-строки строки запроса GET в резервном компоненте на загрузке страницы?
  • Как передать выбранную строку в commandLink внутри dataTable или ui: repeat?
  • Передача компонента поддержки в качестве параметра для Facelet включает
  • Для чего можно использовать , и ?
  • Подтвердить ограничения валидации компонентов уровня classа в JSF
  • JSF не поддерживает проверку кросс-поля, есть ли обходной путь?
  • Как добавить сообщения Faces во время @PostConstruct
  • Упаковка файлов Facelets (шаблоны, включая, композиты) в JAR
  • Давайте будем гением компьютера.