Требуется ли динамическая проверка для разных кнопок? - PullRequest
2 голосов
/ 16 ноября 2010

В настоящее время я изучаю jsf 2.0 из базовой книги jsf 2.0 + glassfish + cdi.

У меня есть вопрос о функции проверки JSF.

Допустим, у меня есть очень простое приложение для входа в систему, которое имеет очень простую структуру, например:

идентификатор пользователя: (поле ввода для идентификатора пользователя - используется обязательный = "истина")
пароль: (введите пароль для пароля - используйте required = "true")
loginButton + registerButton (с использованием немедленного = "true") + checkUserIdAvailabilityButton

Теперь предположим, что кнопка loginButton нажата, а ID пользователя и пароль оставлены пустыми, в обоих полях возникнет ошибка проверки, и это работает так, как я и предполагал.

И когда нажата registerButton, его не волнует, заполнен ли идентификатор пользователя или пароль пользователем, поскольку он использует немедленный = "true", таким образом, минуя валидацию, и команда выполняется на этапе применения значения запроса, и это все еще работает, как я и хотел.

И тут возникает моя проблема ... Когда нажата кнопка checkUserIdAvailabilityButton, я ожидаю, что будет заполнен только идентификатор пользователя, и мне не нужно заботиться о том, заполнено ли поле пароля или нет, но поле пароля выдаст ошибку, сообщая, что это обязательное поле.

Есть ли способ решить эту проблему? Я знаю, что это могло бы быть очень простым приложением, но на моем рабочем месте, я думаю, что они проектируют много экранов, таких как эта, например, кнопка «Сохранить» вместе с кнопкой «Обновить» с различными обязательными полями, но кнопки находятся на одной странице.

Спасибо!

1 Ответ

4 голосов
/ 16 ноября 2010

Установите и кнопку доступности, и поле имени пользователя с помощью immediate="true" и , поместите кнопку регистрации в отдельное <h:form>.

Например

<h:form>
     <h:inputText value="#{bean.username}" required="true" immediate="true" />
     <h:inputSecret value="#{bean.password}" required="true" />
     <h:commandButton value="Login" action="#{bean.login}" />
     <h:commandButton value="Check name availability" action="#{bean.checkNameAvailability}" immediate="true" />
</h:form>
<h:form>
     <h:commandButton value="Register" action="#{bean.register}" />
</h:form>

Альтернативой является определение в требуемом атрибуте, какая кнопка была нажата (затем она присутствует в качестве параметра запроса).

<h:form id="form">
     <h:inputText value="#{bean.username}" required="#{not empty param['form:login'] or not empty param['form:check']}" />
     <h:inputSecret value="#{bean.password}" required="#{not empty param['form:login']}" />
     <h:commandButton id="login" value="Login" action="#{bean.login}" />
     <h:commandButton id="check" value="Check name availability" action="#{bean.checkNameAvailability}" />
     <h:commandButton value="Register" action="#{bean.register}" />
</h:form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...