【发布时间】:2011-11-01 19:30:48
【问题描述】:
我在请求范围的托管 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) 应该阻止这种情况。验证无效! 将属性“必需”添加到字段将解决此问题,但我不希望视图中的验证逻辑。 你对我有什么建议吗?
更新
基本上,上面的代码有效。我在一个单独的项目中对其进行了测试。 在另一个仍然无法工作的项目中,情况有所不同。该表单在 web.xml 文件中配置为登录表单 (login-config)。这是否会对 jsf 生命周期产生一些变化? ..或其他什么?
【问题讨论】:
-
根据您的更新,因此您使用的是
<form>而不是<h:form>? -
不,我用过
<h:form>。这有关系吗?
标签: java jsf glassfish bean-validation