onclick вызывается еще до того, как будет создан запрос ajax (чисто клиентская сторона), тогда как oncomplete и onsuccess выполняются после того, как сервер ответил на запрос ajax.Так что, если вам нужно выполнить некоторую бизнес-логику, например, перед отображением диалога, вы должны перейти к oncomplete.Это то, что я всегда использую.
Вы также можете настроить свой javascript внутри oncomplete для выполнения, только если нет ошибок проверки.Интуитивно я думаю, что onsuccess будет вести себя так и будет выполняться только тогда, когда нет ошибок валидации, но это не так.Я действительно не знаю разницу между ними.Я предполагаю, что есть способ пометить success = false в бинах bean, но я не смог найти его в документации.
Если вы хотите проверить проверку в вашем атрибуте oncomplete, вот как вы 'd do:
oncomplete="if (!args.validationFailed){someDialog.hide()}"
В этом случае вы закроете диалоговое окно только при условии правильной проверки полей.На самом деле вы можете ввести параметры из базового компонента и использовать их в JavaScript после обработки запроса.В своем компоненте поддержки вы можете сделать что-то вроде этого:
RequestContext.getCurrentInstance().addCallbackParam("showDialog", false);
И вы можете получить доступ к такому параметру в своем неполном атрибуте:
oncomplete="if (args && args.showDialog){someDialog.show()}else{ alert('the bean didnt let me open the dialog')}"
В любом случае, я надеюсь, что это поможет.