JSF Bean验证约束没有任何影响

时间:2012-03-12 13:46:11

标签: java jsf bean-validation

我无法使Java Bean验证(JSR-303)正常工作。它不会给出任何错误并处理操作方法。我将一个字符设置为“name”inputText,它接受并且process()方法被执行(Size annotation不适用)。

当我放置一个字符时,我希望My.Process()方法不被执行,我不对吗? 我有什么配置可以让验证工作吗?

在我的项目的WEB-INF / lib目录中,我有 validation-api-1.0.0.GA.jar hibernate-validator-4.2.0.Final.jar
App Server: Tomcat 7.0.25 (在Tomcat的Lib文件夹中,我有 myfaces-api-2.1.5.jar myfaces-impl-2.1.5.jar )。
IDE:Eclipse Helios SR2

我从控制台收到消息“INFO:MyFaces Bean Validation support disabled”,但是我指定了罐子。

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.validation.constraints.Size;

@ManagedBean(name="my")
@RequestScoped
public class MyBean implements Serializable {
  @Size(min=3, message="ERROR")
  private String name;

  public String process() {...}

  ...getters, setters, etc...
}

JSF表格

<h:form>
    <h:messages />
    <h:inputText value="#{my.name}" />
    <h:commandButton value="Save" action="#{my.process}" />
</h:form>

我也尝试过:
@NotEmpty,@ NotBlank,
@ org.hibernate.validator.constraints.Length(min = 3,message =“ERROR”)
但它们也不起作用。

2 个答案:

答案 0 :(得分:3)

我想写一个可能的问题。

当我有这个变量时

private String Name;

验证不起作用,因为getter和setter就像这样

private String getName(){}

所以我将Name重命名为

private String name;

它开始验证:)

可能这就是问题所在。

答案 1 :(得分:1)

谢谢! FYI,bean-validator的maven坐标:

<dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>bean-validator</artifactId>
        <version>3.0-JBoss-4.0.2_03</version>
</dependency>