Я использовал проверку bean-компонента в управляемом bean-объекте, управляемом запросом.
@ManagedBean(name = "loginController")
@RequestScoped
public class LoginController implements Serializable {
private static final long serialVersionUID = -7174581953062231554L;
@NotNull(message = "Password!")
private String mPassword;
@NotNull
private String mUsername;
...
...
public String login() {
..
return "destination.xhtml";
}
.. и в файле web.xml я также настроил это для интерпретации пустых строк как нулевого значения:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
Вид выглядит следующим образом:
<h:form id="login">
<h3><h:outputText value="Username" /></h3>
<h:inputText id="username" value="#{loginController.username}" />
<h3><h:outputText value="Password" /></h3>
<h:inputSecret id="password" value="#{loginController.password}" autocomplete="off" />
<h:commandButton id="submit" value="Login" action="#{loginController.login}">
<f:param name="redirect" value="#{requestScope['javax.servlet.forward.request_uri']}" />
</h:commandButton>
</h:form>
Окружение: Glassfish 3.1.1 / Mojarra JSF 2.1
Проблема: Когда кнопка отправки без заполненияпри нажатии поля имени пользователя или пароля действие будет выполнено, хотя аннотация (@ javax.validation.constraints.NotNull) должна предотвратить это.Проверка не работает!Добавление атрибута «required» к полям решит эту проблему, но я не хочу, чтобы в представлении была логика проверки.У вас есть какой-нибудь совет для меня?
ОБНОВЛЕНИЕ
В принципе, приведенный выше код работает.Я проверил это в отдельном проекте.В другом проекте, который до сих пор не работает, это что-то другое.Форма настраивается как форма входа в систему (login-config) в файле web.xml.Вносит ли это некоторые изменения в жизненный цикл JSF?.. или что-то другое?