【发布时间】:2012-03-28 22:03:12
【问题描述】:
我无法让 Java Bean Validation (JSR-303) 正常工作。它不会给出任何错误并处理 action 方法。我在“name”inputText 中添加了一个字符,它接受并执行 process() 方法(不适用大小注释)。
当我放一个字符时,我希望 My.Process() 方法不会被执行,我说的不对吗? 是否有任何我忽略的配置才能使验证正常工作?
在我的项目的 WEB-INF/lib 目录中,我有 validation-api-1.0.0.GA.jar、hibernate-validator-4.2.0.Final.jar强>.
应用服务器: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")
但它们也不起作用。
【问题讨论】:
-
您的代码在我的环境中工作(GF 3.1.1,Mojarra 2.1.3)。除了 Glassfish (Java EE6 bean-validation.jar) 之外,我没有其他验证 api。
-
好吧,我实际上在写到这里之前简化了我的代码,但是这个精确的简化版本在我上面指定的环境中也不适用于我。我真的厌倦了试图找出问题所在。这没有任何意义吗?我阅读了几十个关于 jsf bean 验证的网页,根据所有这些网页,它应该可以工作......
-
我在控制台收到以下消息,我试图找出它为什么这么说。我有上面指定的罐子。 “信息:MyFaces Bean 验证支持已禁用”
-
哈哈成功了!我从某个地方下载了“bean-validator.jar”并将其放入我的类路径中,现在启用了 bean 验证,它也可以工作:) 感谢您指出 jar 文件马特!但是这个jar没有与bean验证相关的信息真的很奇怪。我什至找不到关于 jar 属于哪个项目的正确信息。
-
我调查了 bean-validator.jar,它看起来像是 validation-api.jar 和 hibernate-validator-4.0.2-GA.jar 的组合所以我删除了它,现在验证仍然有效!我有时害怕永远不会完全理解 java :)
标签: java jsf bean-validation