我在一个请求作用域的托管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. validate .constraints. notnull)应该阻止这种情况。验证不起作用!向字段添加属性"required"将解决这个问题,但是我不希望在视图中包含验证逻辑。你有什么建议给我吗?
基本上,上面的代码可以工作。我在另一个项目中测试了它。在另一个仍然不能正常工作的项目中,情况有所不同。该表单在web.xml文件中配置为登录表单(login-config)。这对jsf的生命周期有什么影响吗?..还是别的什么?
您的验证不是关于String。空而不是"notnull"?特别是当数据来自表单时,字符串的"null"值不应该存在。
需要必需的属性是一个布尔标志,表示是否用户需要在表单之前为这个字段提供一个值可以提交给服务器
也许,在@NotNull下面,你可以尝试添加
@Size(min=1, max=X)
请看这里:http://download.oracle.com/javaee/6/tutorial/doc/gircz.html