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

Spring内插器

澹台玉石
2023-03-14

我使用Spring3.1。1和Hibernate验证程序4.3。0.Final,在更改默认MessageInterpolator时遇到问题,默认MessageInterpolator从ValidationMessages(在类路径中)获取验证消息。

我想使用ResourceBundleMessageInterpolator,它将从我的spring消息源获取消息

我在我的应用程序上下文中做了类似的事情。xml:

<bean id="resourceBundleMessageInterpolator"
      class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
    <constructor-arg index="0">
        <bean class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
            <constructor-arg index="0" ref="messageSource"/>
        </bean>
    </constructor-arg>
</bean>
<bean id="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="messageInterpolator" ref="resourceBundleMessageInterpolator"/>
</bean>

当我在日志中启动我的Web应用程序时,我看到:

11:04:07,402 DEBUG [org.hibernate.validator.internal.engine.ConfigurationImpl] - 
Setting custom MessageInterpolator of type
 org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator 
11:04:07,402 DEBUG [org.hibernate.validator.internal.engine.ConfigurationImpl] - 
Setting custom ConstraintValidatorFactory of type org.springframework .validation.beanvalidation.SpringConstraintValidatorFactory

正如你们所看到的,我想要的不是ResourceBundleMessageInterpolator。这是LocaleContextMessageInterpolator

稍后,当我尝试验证某些东西时,我只是从ValidationMessages获取消息。属性,而不是来自spring消息源:

11:08:09,397 DEBUG [org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - 
ValidationMessages not found.
11:08:09,413 DEBUG [org.hibernate.validator.resourceloading.PlatformResourceBundleLocator] - 
org.hibernate.validator.ValidationMessages found.

从application-context.xml可以看到,我想使用MessageSourceResourceBundleLocator,但是它被使用了,我不知道为什么PlatformResourceBundleLocator

有什么想法吗?

共有1个答案

鲁单弓
2023-03-14

你不必自己声明ResourceBundleMessageInterpolatorMessageSourceResourceBundleLocatorbean(除非你必须这样做),它们是由LocalValidatorFactoryBean在你提供MessageSource时创建的:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource" ref="messageSource"/>
 </bean>

(它在引擎盖下执行此操作:)

public void setValidationMessageSource(MessageSource messageSource) {
    this.messageInterpolator = HibernateValidatorDelegate.buildMessageInterpolator(messageSource);
}

// (...)


private static class HibernateValidatorDelegate {

    public static MessageInterpolator buildMessageInterpolator(MessageSource messageSource) {
        return new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(messageSource));
    }
}

因此,使用简化的bean定义,您会得到相同的调试输出吗?您在哪里使用“验证器”ref?您可能必须使用

 类似资料:
  • 我一直在用Spring Boot做P.O.C。 到目前为止,它运行得非常好,前景看好,但有一个主要缺点:我使用的是嵌入式服务器(即,将web应用程序打包在)中,因此在开发时,每次更改CSS、HTML或JS文件时,我都必须重新构建jar并重新启动服务器。没有热插拔。这确实减慢了UI开发的速度。 我可以想出几个快速修复方法,比如从不同的域中加载静态资源并从本地提供服务,以及类似的其他变体,但是在使用I

  • YDoc 内置了如下插件: ydoc-plugin-import-asset 在页面中引入 js 与 css 文件 ydoc-plugin-search 为 YDoc 提供搜索功能 删除内置插件 在配置文件中配置 plugins 字段,在内置插件名称前面添加 '-' 即可删除该内置插件: module.exports = { plugins: ["-search", "-import-asse

  • 问题内容: 我正在尝试将一些内容插入“空白” iFrame中,但是没有插入任何内容。 HTML: JS: 我正在调用该函数,所以我不明白为什么它没有插入。 问题答案: 您真的不需要jQuery: 如果绝对必须使用jQuery,则应使用 请不要忘记,如果您使用的是jQuery,则需要按如下所示插入DOMReady函数:

  • 问题内容: 我有一个包含以下信息的数据框: 我想根据索引插入数据帧中的值, 但仅在每个文件组中 。 插值,我通常会做 和我一起做 我希望插入的数据帧看起来像这样: NaN仍然存在于t = 6的位置,因为它们是file2组中的第一项。 我怀疑我需要使用“应用”,但是还无法确切地知道如何… 任何帮助,将不胜感激。 问题答案:

  • 伙计们,我试图使用proGuard-maven-plugin混淆一个. jar应用程序。 当我试图执行混淆过程时,我会收到错误消息,说明有意想不到的类。 我正在使用Spring Boot 1.4.1。发布和宣传Maven插件2.0.13。 这是我的前卫。形态 pom。xml文件。我只是通过插件通知配置。 然而,在执行过程中,我得到了以下返回我的应用程序中的所有类。 以及ProGuard的最终输出。

  • 在我的Spigot插件中,我使用重复任务每隔0.5秒更新一次玩家的库存。长时间运行代码后,我会得到。 我做了一些调试并使用JProfiler来查看导致内存泄漏的原因,并注意到ItemStacks的数量不断增加。堆遍历器显示这是由更新库存的代码引起的。这是当前代码: 经过更多的调试,我发现删除了将停止增加的itemStack数量。 什么可能导致内存泄漏? 编辑: 我已经更改了代码,不再为每个玻璃窗格