Как очистить значение h: message или rich: message в JSF? - PullRequest
5 голосов
/ 01 июня 2010

Я занимаюсь разработкой приложения JSF, и у меня есть много пользовательских форм, в которых я использую проверки JSF. У меня есть проблема, которая меня раздражает, легче будет рассказать об этом на примере.

                    <h:panelGroup>
                    <h:selectOneRadio id="gender" value="#{registrationController.person.gender}" 
                                      required="true" requiredMessage="#{msg.commonErrorBlankField}">
                        <f:selectItems value="#{registrationController.genders}" />
                    </h:selectOneRadio>
                    <rich:spacer />
                    <rich:message for="gender" errorLabelClass="errorLabel">
                        <f:facet name="errorMarker">
                            <h:graphicImage value="#{msg.imageExclamation}" />
                        </f:facet>
                    </rich:message>
                </h:panelGroup>

Выше, если опция радио не выбрана, отображается требуемое сообщение. И когда пользователь делает выбор, я вижу ошибку проверки. Справедливо ! Моя проблема в том, что когда пользователь переходит на следующую страницу, а затем с помощью кнопки «Назад» браузера снова возвращается на эту страницу, и я вижу, что мое поле пола выбрано соответствующим образом, но ошибка проверки все равно отображается.

Кто-нибудь знает, есть ли обходной путь для очистки поля h: message, когда я нажимаю кнопку команды, чтобы ошибка проверки не отображалась, когда я возвращаюсь на ту же страницу?

Ответы [ 3 ]

1 голос
/ 11 января 2011

Важно понимать, что кнопка возврата браузера не будет вызывать запрос к серверу.

, что не совсем правильно, современные браузеры инициируют запрос, если данные были опубликованы на предыдущих этапах навигации.

1 голос
/ 02 июня 2010

Не уверен, что это работает. Я не проверял это:

//idComponent is the Component whose message you want to clear, e.g. gender
void clearMessageForComponent (final String idComponent) {
        if (idComponent != null) {
            Iterator<FacesMessage> it = FacesContext.getCurrentInstance().getMessages(idComponent);
            while(it.hasNext()){
                ((FacesMessage)it.next()).setDetail("");
            }
        }
    }
0 голосов
/ 11 ноября 2010

Удаление сообщений из FacesContext не решит вашу проблему, так как это повлияет только на состояние вашего приложения на стороне сервера. Нажатие кнопки «Назад» браузера заставляет клиентский браузер перезагрузить страницу из локального кэша браузера.

Важно понимать, что кнопка возврата браузера не будет вызывать запрос к серверу.

...