Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ValidationMessages.properties文件之间存在冲突_Java_Bean Validation_Resourcebundle - Fatal编程技术网

Java ValidationMessages.properties文件之间存在冲突

Java ValidationMessages.properties文件之间存在冲突,java,bean-validation,resourcebundle,Java,Bean Validation,Resourcebundle,我使用收集公共库中的所有验证约束。在jar的根目录中,我放置了一个ValidationMessages\u it.properties文件。 如果我把这个库放到JSF2WAR项目中,所有的验证消息都会正确显示。 然而,如果我在war工件中也放入另一个ValidationMessages\u it.properties,就会出现问题。在这种情况下,将显示{library.message_key}字符串 我认为Bean验证在war中找到了正确的属性文件,而在库中没有考虑到这一点。 我怎样才能解决这个

我使用收集公共库中的所有验证约束。在jar的根目录中,我放置了一个
ValidationMessages\u it.properties
文件。 如果我把这个库放到JSF2WAR项目中,所有的验证消息都会正确显示。 然而,如果我在war工件中也放入另一个
ValidationMessages\u it.properties
,就会出现问题。在这种情况下,将显示
{library.message_key}
字符串

我认为Bean验证在war中找到了正确的属性文件,而在库中没有考虑到这一点。 我怎样才能解决这个问题

例子 我有一个库commons.jar,它包含自定义约束。为了设置这些约束的消息,我在这个库的根目录中添加了一个
ValidationMessages\u it.properties

commons.jar
|
+图书馆
|   |
|+CustomConstraint.class
|
+ValidationMessages\u it.properties
ValidationMessages\u it.properties
library.custom=Questoèl'errore di cui parlavo
CustomConstraint.java
@Pattern(regexp=“[a-z]”,message=“{library.custom}”)
@约束(validatedBy={})
@记录
@目标({ElementType.METHOD,ElementType.FIELD})
@保留(RetentionPolicy.RUNTIME)
public@interface自定义约束{
字符串消息()默认为“C'èun error”;
类[]组()默认值{};

类我认为您的解决方案是提到的AggregateResourceBundleLocator。但是,属性文件不能有相同的名称。内部调用ResourceBundle#getBundle,它返回一个ResourceBundle。没有合并/合并同名属性文件的概念

编辑1


关于一种标准的方法,不幸的是没有。Bean Validation 1.1()有一个开放的问题要解决提供约束库的能力,但还没有决定,消息插值也需要解决。也许您对它应该如何工作有一个想法。如果是这样,请向专家组提供建议。默认情况下,如果多个JAR/WAR/etc文件包含一个资源包,请检查beanvalidation.org

具有完全相同名称的文件,其中只有一个将用于验证程序消息。这里的问题是:
commons.jar
和应用程序WAR都包含名为
ValidationMessages\u it.properties
的资源

Hibernate Validator 5.2于2015年7月发布,增加了对聚合不同JAR文件中具有相同名称的所有资源包的支持。默认情况下禁用此功能,可以在中配置

例如:

PlatformResourceBundleLocator resourceBundleLocator =
    new PlatformResourceBundleLocator(ResourceBundleMessageInterpolator.USER_VALIDATION_MESSAGES, null, true);

Validator validator = Validation.byProvider(HibernateValidator)
    .configure()
    .messageInterpolator(new ResourceBundleMessageInterpolator(resourceBundleLocator))
    .buildValidatorFactory()
    .getValidator();
使用Java配置的Spring项目的等效代码:

@Bean
public LocalValidatorFactoryBean validator() {
    PlatformResourceBundleLocator resourceBundleLocator =
            new PlatformResourceBundleLocator(ResourceBundleMessageInterpolator.USER_VALIDATION_MESSAGES, null, true);

    LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
    factoryBean.setMessageInterpolator(new ResourceBundleMessageInterpolator(resourceBundleLocator));
    return factoryBean;
}

您真正想要实现的是什么?为什么要将捆绑包多次添加到应用程序中?您能否澄清您的配置?您在何处以及如何添加另一个ValidationMessages_it.properties。也许您可以概述war的完整结构,当然还有为什么要添加同一个属性文件两次。如果您愿意的话要能够指定多个不同的属性文件,您应该查看AggregateResourceBundleLocator(如果您使用的是Hibernate Validator)@哈迪:它不是同一个包,它是另一个包含其他消息的包。请参阅我的post@Gunnar,因为您在JSR 349中,例如,您可以看看我的编辑吗?我不知道这是我的配置中的错误、错误还是预期的行为。上载的Web应用程序的FileFactory链接现在无效:无效的下载链接:此文件可能已被删除或已过期。如果文件链接无效,也可能发生此错误。“我有点困惑。是BV迫使我对捆绑包使用相同的名称。我试图做的是一项非常常见的任务,所以我认为EG提供了一种标准的方法来完成它。相反,这里您建议使用hibernate类。我打开了另一个问题,请参阅edit2。非常感谢您的耐心这里没有“标准”做你想做的事情的方法。Bean Validation 1.1()有一个开放的问题要解决提供约束库的能力,但还没有决定,消息插值也需要解决。也许你对它应该如何工作有一个想法。如果是这样,请向专家组提供你的建议。检查beanvalidation.org非常感谢。我认为这是一个bug。如果你更新你的答案我很乐意接受。