Alm*_*pos 4 java spring spring-mvc spring-messaging
这应该是一个简单的问题,但我找不到直接的解决方案.
我正在使用Spring Message Resource从.properties文件中提供我系统上的所有文本.我需要那些国际化问题,不能使用Spring的默认消息.
这是问题所在:
我的.properties文件中有以下行:
validator_invalid_state_name=Invalid name ({min}, {max})
Run Code Online (Sandbox Code Playgroud)
验证码是:
@Size( min=3, max=5, message="validator_invalid_state_name" )
public String name;
Run Code Online (Sandbox Code Playgroud)
但是,当向字段发送无效值时,消息为:
"无效的名称({min},{max})"而不是 "无效的名称(3,5)".
我尝试了几种解决方案但没有成功,例如:
@Size( min=3, max=5, message="{validator_invalid_state_name}" )
@Size( min=3, max=5, message="${validator_invalid_state_name}" )
@Size( min=3, max=5, message="Size.name" ) // with "Size.name=Invalid name ({min}, {max})" in my .properties file
@Size( min=3, max=5, message="{Size.name}" ) //idem
Run Code Online (Sandbox Code Playgroud)
但如果我只使用
@Size( min=3, max=5 )
Run Code Online (Sandbox Code Playgroud)
然后,我从Spring获取默认消息(我不想使用).我需要的是非常简单:从我的自定义.properties文件中使用我自己的消息,但使用@Size注释提供的参数.
有什么建议?
先感谢您.
访问密钥的正确语法是
@Size( min=3, max=5, message="{validator_invalid_state_name}" )
Run Code Online (Sandbox Code Playgroud)
但问题是,在默认设置中,密钥查找不会针对您的custom.properties进行,而是针对Spring的ValidationMessages.properties.因此,让您启动并运行的最快方法是创建ValidationMessages.properties(和18n等效项)并添加您的密钥,例如
validator_invalid_state_name=Invalid name ({min}, {max})
Run Code Online (Sandbox Code Playgroud)
这是最简单的解决方案,没有配置问题.
现在,既然你希望从你的属性文件中提供这个,那么,它是可行的,但是你必须找到一个合适的配置.对于Spring 4.x,这将是正确的xml和java配置.
Java配置
@Bean(name = "messageSource")
public MessageSource messageSource()
{
ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource();
bean.setBasename("classpath:text");
bean.setDefaultEncoding("UTF-8");
return bean;
}
@Bean(name = "validator")
public LocalValidatorFactoryBean validator()
{
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
@Override
public Validator getValidator()
{
return validator();
}
Run Code Online (Sandbox Code Playgroud)
XML配置
<annotation-driven validator="validator">
<!--i18n filtering-->
<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
<beans:value>classpath:custom</beans:value>
</beans:list>
</beans:property>
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
<beans:bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<beans:property name="validationMessageSource" ref="messageSource"/>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
对于Spring mvc 3.x,您将无法在LocalValidatorFactoryBean上找到validationMessageSource属性,因为您必须创建消息插补器并进行设置.您在此主题http://forum.spring.io/forum/spring-projects/web/78675-jsr-303-validation-spring-mvc-and-messages-properties中有一个示例.希望能帮助到你
| 归档时间: |
|
| 查看次数: |
8101 次 |
| 最近记录: |