当前位置: 首页 > 知识库问答 >
问题:

Bean验证(JSR303)和Hibernate验证在EAR内部不触发

章城
2023-03-14

我缺少一些真正基本的东西(与EAR或EAR配置中的类加载相关)。我不明白,为什么我的JSR303验证和Hibernate验证不是从EAR内部触发的...如果我创建一个新的战争项目,它就会触发。

我正在Weblogic Server10.3上用Maven、JSF2.0、Open-JPA、EJB3.0建立一个新项目。我使用maven原型创建了所有项目。我有一个最终的EAR构建,它的结构如下:

  • 项目名称
    • EJB
    • 网站
    • lib
    • 元INF

    在Web中,我有一个login.xhtmlusernamepassword字段与TestMPB变量和具有依赖关系的POM映射:validation-api 1.0.0.ga,hibernate-validator 4.2.0.final…

    页面支持bean的(TestMPB)变量有@patter@notempty注释,但JSF验证阶段从不触发它们。JSF验证工作良好,但我想使用JSR303和Hibernate验证。

    login.xhtml包含以下impt行:

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

    能想出什么办法来解决这个问题吗?

共有1个答案

严宏朗
2023-03-14

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

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

看起来,为了日志记录,Hibernate Validator使用了一些日志记录API,一个支持一些日志记录解决方案的抽象层作为实现。因此,只要向类路径添加一个受支持的日志库,日志就会将任何日志请求委托给该提供者。

奇怪的是,在我的服务器日志中或在编译时没有错误,而Hibernate(或Bean JSR303)验证缺少日志依赖项...我在这上面浪费了3天时间,但很高兴它现在起作用了...

 类似资料:
  • 环境 Glassfish 3.1.2内置Hibernate-Validator 4.2。

  • 我按照这个教程https://spring framework . guru/spring-boot-restful-API-documentation-with-swagger-2/生成了一个swagger文档。它可以工作,但是当我试图在bean中添加一些验证时,我在文档中找不到信息: 带有验证注释的我的实体: 这里,https://github.com/springfox/springfox/

  • 我想从我的应用程序中提取DTO以将它们作为jar提供给层应用程序。 但我使用了Bean验证,所以DTO使用自定义约束进行注释。这种自定义注释对验证实现具有依赖性(链接)。 因此,我的DTO模块依赖于注释,而注释依赖于验证器,验证器依赖于DAO,然后是完整的核心应用程序。 有没有办法打破这种依赖循环?提供DTO jar而不依赖(或只提供bean验证API)的良好实践是什么? 谢谢

  • 我正在使用spring(4.2.0.RELEASE)、hibernate validator(5.2.1.Final)和validation api(1.1.0.Final)对后端应用程序进行JSR验证,配置如下:, 但是没有一个JSR303注释在我的应用程序中工作。 注意:在POJO类上添加了JSR303注释,在服务类(使用POJO)上添加了@Validated注释,还尝试在方法级别添加@Val

  • 我需要应用一个双值验证,这需要与圆周率匹配。我正在考虑使用@pattern(regex=“3.14159265359”)。这是使用Hibernate验证约束应用这样一个约束的最佳方式吗?谢谢

  • 问题内容: 问题已经解决了这里,但没有工作,我(不相同的弹簧引导版本我猜)本 尝试编写自定义约束验证器代码,以在保留之前检查帐户电子邮件是否存在。 // ------------------------------------------------ -------------------------- // --------------------------------------------