Faces Bean Validation не работает на Glassfish 3.1.1

Я использовал проверку 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? ..или что-то другое?


person Wiegand    schedule 23.08.2011    source источник
comment
Согласно вашему обновлению, вы использовали <form> вместо <h:form>?   -  person BalusC    schedule 23.08.2011
comment
Нет, я использовал <h:form>. Это имеет значение?   -  person Wiegand    schedule 23.08.2011


Ответы (1)


Разве ваша проверка не будет связана с String.empty вместо «notnull»? Особенно, если данные поступают из формы, где «нулевое» значение для строки не должно существовать.

необходимые

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

Может быть, ниже @NotNull вы можете попробовать добавить

@Size(min=1, max=X)

См. здесь: http://download.oracle.com/javaee/6/tutorial/doc/gircz.html

person Yannick    schedule 22.09.2011
comment
Обратите внимание, что параметр контекста javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL присутствует. Это заботится о том, чтобы JSF интерпретировал представленные значения пустой строки как null, а также проверял их как таковые. - person BalusC; 22.09.2011