【发布时间】:2013-02-11 17:20:28
【问题描述】:
我缺少一些非常基本的东西(与 EAR 或 EAR 配置中的类加载有关)。我想不通,为什么我的 JSR 303 验证和 Hibernate 验证没有从 EAR 内部触发……如果我创建一个新的 WAR 项目,它确实会触发。
我正在 Weblogic Server 10.3 上使用 Maven、JSF 2.0、Open-JPA、EJB 3.0 建立一个新项目。我使用 Maven 原型创建了所有项目。我有一个最终的 EAR 版本,其结构如下:
- 项目名称
- ejb
- 网络
- 库
- 元信息
在 Web 中,我有一个 login.xhtml 与 userName 和 Password 字段映射到 TestMPB 变量和 poms 具有依赖关系:validation-api 1.0.0.GA,hibernate-validator 4.2.0.Final…
页面支持 bean 的 (TestMPB) 变量具有 @Pattern 和 @NotEmpty 注释,但它们不会被 JSF 验证阶段触发。 JSF 验证工作正常,但我想使用 JSR 303 和 Hibernate 验证。
login.xhtml 包含以下提示行:
<h:messages layout="table" showDetail="false" showSummary="true"/>
<h:inputText class="textbox" id="userId" value="#{testMPB.userId}"></h:inputText>
<h:commandButton id="button" action="#{testMPB.login}" value="Login" ></h:commandButton>
TestMPB 包含:
@Pattern(regexp = "^(?=.*[a-zA-Z])[a-zA-Z0-9_]{2,15}\\s*$", message = "userId invalid")
@NotEmpty(message = "userId empty")
private String userId = "";
public String login(){ System.out.println("User Login ::"+getUserId());
return "/web/ui/s/home/home.xhtml";
}
Application.xml 包含
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
<display-name>ear</display-name>
<module>
<web>
<web-uri>web</web-uri>
<context-root>/NewAccountsWeb</context-root>
</web>
</module>
<module>
<ejb>ejb</ejb>
</module>
<library-directory>lib</library-directory>
</application>
为了调试,我确定:
- JSF 托管页面 bean (TestMPB) 在页面加载时初始化(通过在构造函数中添加 SOP)
- 在提交页面时,调用该方法并打印 userName 值。
- 在 POM 中添加的 JAR 依赖项是正确的,并且它们存在于最终的 EAR 构建中。
- 当我创建 WAR 项目时,相同的 JSR 303 和 Hibernate 验证适用于同一组
login.xhtml和 TestMPB.java。 - 创建了阶段侦听器并打印了所有阶段以确保调用阶段。
- 为了测试,我还添加了 JSF 验证 (
required=true),它可以工作并在 h:message 中显示消息。
能想出什么办法来解决这个问题吗?
【问题讨论】:
-
您能否展示 bean 验证 api 和 hibernate 验证器 jar 在您最后的耳朵中的最终位置?当在类路径上检测到 Bean Validation API 时,确实应该自动启用 Bean Validation。我的猜测是存在类加载问题。
标签: jakarta-ee jsf-2 bean-validation ear hibernate-validator