hibernateValidator读取不到CustomValidationMessages.properties文件,jsp页面直接显示错误码

今天复习hibernateValidator框架,突然这里直接显示错误码,而不是对应properties文件配置的中文。
在这里插入图片描述
明明我的配置文件是有配置的。
CustomValidationMessages.properties

items.pic.NotEmpty = 图片不能为空
items.name.length.error = 商品名称长度在5~20个字符之间
items.price.range.error = 商品价格不能为负数
items.detail.NotNull.error= 商品描述不能为空
items.createtime.NotNull.error = 生产日期不能为空
items.price.NotNull.error =  价格不能为空
items.detail.length.error = 商品描述最少4个字符
items.detail.NotEmpty.error = 商品名称不能为空

一开始我还以为是EL表达式不解析的原因,后来加上<%@ page isELIgnored=“false” %>,还是不行。
接着检查POJO类的注解是否写正确了:

POJO类代码:

    @Length(min = 5,max = 20,message = "{items.name.length.error}")
    @NotEmpty(message = "{items.detail.NotEmpty.error}")
    private String name;
    @NotNull(message = "{items.price.NotNull.error}")
    @Range(min = 0,message = "{items.price.range.error}")
    private Float price;
    @NotEmpty(message = "{items.pic.NotEmpty}")
    private String pic;
    @NotNull(message = "{items.createtime.NotNull.error}")
    private Date createtime;
    @NotEmpty(message = "{items.detail.NotNull.error}")
    @Length(min = 5,message="{items.detail.length.error}")

发现也没毛病,接着我检查jsp代码:
jsp:

    <c:if test="${allErrors!=null}">
        <c:forEach items="${allErrors}" var="err">
            <ul>
                <li>
                    <span style="color: blueviolet;font-size: 15px;" >${err.defaultMessage}</span>
                </li>
            </ul>
        </c:forEach>
    </c:if>

JSP也没错误,后来我干脆直接在controller上面输出错误信息提示:看看在controller是否获取到了自己配置的错误信息。
输出的错误信息:发现确实没有获取到自己的配置。
在这里插入图片描述
为了验证,我将CustomValidationMessages.properties文件删除掉,依然是这样的输出,原来程序根本就没有读取到配置文件。后来经过代码对比,发现了问题所在:
原来我的springmvc.xml的代码漏了,没把校验器注入到处理器适配器,程序就直接读取注解上面的错误码。

<!-- 之前是这样写的:
<mvc:annotation-driven conversion-service="conversionService"/>
--> 
	<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>
    <!--配置校验器-->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!--指定使用hibernate的校验器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
        <!--指定校验使用的资源文件,在文件中配置错误校验信息,如果不指定则默认使用classpath下的ValidationMessages.properties-->
        <property name="validationMessageSource" ref="messageSource"/>
    </bean>
    <!--错误信息配置文件-->
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!--资源文件编码格式-->
        <property name="fileEncodings" value="utf-8" />
        <property name="defaultEncoding" value="utf-8"/>
        <!--资源文件名-->
        <property name="basenames">
            <list>
                <value>classpath:CustomValidationMessages</value>
            </list>
        </property>
        <!--对资源文件内容缓冲时间,单位秒-->
        <property name="cacheSeconds" value="120"/>
    </bean>

<mvc:annotation-driven> 标签中加上 validator=“validator” ,之后就成功了。

在解决这个问题的过程中也出现了一些其它问题:
比如说CustomValidationMessages.properties文件只能放在resource跟目录下,不能放在其它地方,不然还是找不到这个文件,暂时没有解决办法,我发现会出现这种情况的文件还有log4j.properties,这个可以在web.xml中进行配置就可以放置在其它目录下了。
至于页面出现校验提示乱码,我另外一篇文章有提到解决办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值