PrimeFaces: условное обновление при проверке - PullRequest
2 голосов
/ 09 марта 2012

Можно ли условно обновить компоненты JSF, только если проверка прошла успешно?

Я хотел бы иметь возможность сделать что-то вроде

<p:commandLink process="@form" listener="#{foo}" 
  update="something somethingElse"> 

, где "что-то" обновляется только при проверкеуспешно.

Есть ли способ, который можно сделать, или это просто не поддерживается в JSF?

Мне удалось создать своего рода хак с помощью скрытых командных ссылок, но я не совсем доволен:

<p:commandLink process="@form" listener="#{foo}" 
  update="somethingElse" oncomplete="if (!args.validationFailed) $("#link").click();">
<p:commandLink style="display:none" id="link"
  update="something">

Ответы [ 2 ]

3 голосов
/ 20 мая 2015

Не думаю, что предложение message обязательно отвечает на заданный вопрос. Предположим, он хочет обновить что-то ДРУГОЕ, чем message?

Я сам не пробовал, но другой подход, который может сработать, - использовать remotecommand.

<p:remoteCommand id='good' update='goodUpdates'/>  
<p:remoteCommand id='bad' update='badUpdate'/>  
<p:commandButton oncomplete='if (your-test) good() else bad()'/>  

Обратите внимание, что для этого потребуется еще один прием на сервер и, следовательно, производительность является фактором.

2 голосов
/ 09 марта 2012

<h:message> (или аналог PrimeFaces <p:message>) предназначен для этого. Или, в вашем случае, может быть, лучше, <h:messages> (или <p:messages>).

public void submit() {
    // ...

    if (fail) {
        FacesContext.getCurrentInstance().addMessage(null, 
            new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fail", null));
    }
}

с

<h:messages id="messages" />
<p:commandLink process="@form" action="#{bean.submit}" update="messages something" />

Обратите внимание, что вы также должны использовать обычную реализацию Validator для выполнения проверки. Если он выдаст ValidatorException, то действие все равно не будет запущено. Выполнение проверки внутри метода действия - это запах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...