繁体   English   中英

Faces Bean验证在Glassfish 3.1.1上不起作用

[英]Faces Bean Validation doesn't work on 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中,我还配置了此功能,用于将空字符串解释为null值:

<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”将解决此问题,但我不希望视图中具有验证逻辑。 您对我有什么建议吗?

更新

基本上,上面的代码有效。 我在一个单独的项目中对其进行了测试。 在另一个仍无法正常工作的项目中,情况有所不同。 该表单在web.xml文件中配置为登录表单(login-config)。 这会改变jsf的生命周期吗? ..或其他?

您的验证是否不是String.empty而是“ notnull”? 特别是如果数据来自表单,则字符串的“空”值不应该存在。

需要

required属性是一个布尔型标志,指示在将表单提交到服务器之前是否要求用户为此字段提供一个值

也许在@NotNull下面,您可以尝试添加

@Size(min=1, max=X)

参见此处: http : //download.oracle.com/javaee/6/tutorial/doc/gircz.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM