2

我缺少一些非常基本的东西(与 EAR 或 EAR 配置中的类加载有关)。我想不通,为什么我的 JSR 303 验证和 Hibernate 验证不会从 EAR 内部触发……如果我创建一个新的 WAR 项目,它会触发。

我正在 Weblogic Server 10.3 上使用 Maven、JSF 2.0、Open-JPA、EJB 3.0 建立一个新项目。我使用 Maven 原型创建了所有项目。我有一个最终的 EAR 版本,其结构如下:

  • 项目名称
    • ejb
    • 网络
    • 元信息

在 Web 中,我有一个与TestMPB 变量和具有依赖关系的 poms 映射 的login.xhtmlwithuserName和字段:validation-api 1.0.0.GA、hibernate-validator 4.2.0.Final…</p>Password

页面支持 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)
  • 在提交页面时,调用该方法并打印用户名值。
  • 在 POM 中添加的 JAR 依赖项是正确的,并且它们存在于最终的 EAR 构建中。
  • login.xhtml当我创建 WAR 项目时,相同的 JSR 303 和 Hibernate 验证适用于相同的一组和 TestMPB.java。
  • 创建一个阶段侦听器并打印所有阶段以确保调用阶段。
  • 为了测试,我还添加了 JSF 验证 ( required=true),它可以工作并在 h:message 中显示消息。

能想到什么可以解决这个问题吗?

4

1 回答 1

1

我能够自己解决这个问题......

我在我的项目类路径中添加了 slf4j-log4j12 1.6.4 jar 并且 bean 和 hibernate 字段级验证都开始工作...... jboss-logging-3.1.0.GA.jar 也可能工作...... Log4j jar 也是已经在类路径中。

看来,出于日志记录的目的,Hibernate Validator 使用了一些 Logging API,这是一个支持一些日志记录解决方案作为实现的抽象层。因此,如果您只是将受支持的日志库添加到类路径中,并且日志记录会将任何日志请求委托给该提供程序。

奇怪的是,我的服务器日志或编译时没有错误,Hibernate(或 Bean JSR 303)验证缺少日志依赖项......我浪费了 3 天时间,但很高兴它现在可以工作。 ..

于 2013-02-12T15:08:52.010 回答