Я использовал проверку 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) должна предотвратить это. Проверка не работает! Добавление атрибута «обязательный» к полям решит эту проблему, но мне не нужна логика проверки в представлении. У тебя есть какой-нибудь совет для меня?
ОБНОВЛЕНИЕ
В принципе, приведенный выше код работает. Я тестировал его в отдельном проекте. В другом проекте, который до сих пор не работает, дело обстоит иначе. Форма настроена как форма входа (login-config) в файле web.xml. Вносит ли это какие-то изменения в жизненный цикл jsf? ..или что-то другое?
<form>
вместо<h:form>
? - person BalusC   schedule 23.08.2011<h:form>
. Это имеет значение? - person Wiegand   schedule 23.08.2011