Проверка Faces Bean не работает на Glassfish 3.1.1 - PullRequest
1 голос
/ 23 августа 2011

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

1 Ответ

0 голосов
/ 22 сентября 2011

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

Обязательно

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

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

@Size(min=1, max=X)

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

...