Как найти индикацию ошибки проверки (required = “true”) при выполнении команды ajax
У меня есть форма внутри диалогового windows, которое я закрываю, нажимая на commandbutton с ajax,
как это
и вот код js для закрытия диалога
- Почему геттер называется так много раз с помощью атрибута rendered?
- JSF 2 вставляет Spring bean / service с помощью @ManagedProperty и без xml
- Можете ли вы обновить h: outputLabel от ap: ajax listener?
- как отлаживать JSF / EL
- com.sun.faces.numberOfViewsInSession vs com.sun.faces.numberOfLogicalViews
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"); } }
- JSTL в JSF2 Facelets ... имеет смысл?
- Как обновить версию Mojarra в GlassFish
- Зачем нужно вставлять компонент с rendered = "# {some}" в другой компонент, когда я хочу ajax-обновить его?
- Динамически создавать столбцы таблицы в JSF
- ViewExpiredException не выбрасывается на запрос ajax, если страница JSF защищена j_security_check
- Как реализовать фильтр входа в JSF?
- Возможно ли отключить прослушиватель f: event type = "preRenderView" при обратной передаче?
- Как обрабатывать завершение сеанса и ViewExpiredException в JSF 2?
Не 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. Это поможет вам инициировать клиентский код на стороне сервера.