【问题标题】:typeMismatch custom message never showstypeMismatch 自定义消息从不显示
【发布时间】:2014-11-26 20:34:31
【问题描述】:

我正在开发一个 Spring+Hibernate 项目,我正在对我的表单使用验证,并且我在类路径上有 ValidationMessages.properties 文件,它可以正常工作,但日期字段除外,对于日期字段,验证始终显示留言

无法将 java.lang.String 类型的属性值转换为必需的 为属性 fechaFinal 键入 java.util.Date;嵌套异常是 org.springframework.core.convert.ConversionFailedException: 失败 从 java.lang.String 类型转换为 @javax.persistence.Column 类型 @javax.validation.constraints.NotNull java.util.Date for value '; 嵌套异常是 java.lang.IllegalArgumentException

我正在寻找改变它,我发现我必须使用 typeMismatch 但它对我不起作用,无论我如何尝试,这里是我的来源:

ValidationMessages.properties

typeMismatch = La fecha debe tener el formato DD/MM/AAAA
typeMismatch.java.util.Date = La fecha debe tener el formato DD/MM/AAAA
typeMismatch.ciclo.fechaInicial = La fecha debe tener el formato DD/MM/AAAA 
typeMismatch.ciclo.fechaFinal = La fecha debe tenerel formato DD/MM/AAAA
typeMismatch.Ciclos.fechaInicial = La fecha debe tener el formato DD/MM/AAAA 
typeMismatch.Ciclos.fechaFinal = La fecha debe tener el formato DD/MM/AAAA
typeMismatch.fechaInicial = La fecha debe tener el formato DD/MM/AAAA 
typeMismatch.fechaFinal = La fecha debe tener el formato DD/MM/AAAA

string.empty=Este campo es obligatorioo
string.invalid.size=Este campo debe tener una longitud de {min} a {max} caracteres

date.invalid=Fecha obligatoria en formato: DD/MM/AAAA

string.empty 和 string.invalid.size 每次都可以正常工作,而 typeMismatch 永远不会工作..

实体代码 Ciclos.java

@Entity
@Table(name="ciclos")  
public class Ciclos implements Serializable{

    //...

    @Column(name = "nombre")    
    @NotEmpty(message="{string.empty}")
    @Size(min=5, max=55, message="{string.invalid.size}")   
    private String nombre;      

    @Column(name = "fecha_inicial")     
    @NotNull    
    private Date fechaInicial;      

    @Column(name = "fecha_final")
    @NotNull(message="{date.invalid}")  
    private Date fechaFinal;

    //... 
}

控制器代码 CiclosController.java

@Controller public class CiclosController {

    //...   
    @RequestMapping(value="/saveciclo.html")
    public ModelAndView saveCiclo(@Valid Ciclos ciclo, BindingResult bindingResult, ModelMap modelMap){         
        if(bindingResult.hasErrors()){
            modelMap.put(BindingResult.class.getName()+".ciclo",bindingResult);         
        }       
        return new ModelAndView("cicloEdit","ciclo",ciclo);
    }    
}

查看代码cicloEdit.jsp

<%@ include file="/WEB-INF/views/include.jsp" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>    
<html>
<head>
    <!-- header data --> 
</head>
<body>
    <!-- some things -->
    <form:form action="saveciclo.html" method="post" commandName="ciclo">
        <form:label path="nombre">Ciclo: </form:label> 
        <form:input path="nombre" placeholder="Nombre del ciclo"></form:input> 
        <form:errors path="nombre"/> <br /> 
        <form:label path="fechaInicial">Inicia en: </form:label>
        <form:input path="fechaInicial" placeholder="DD/MM/AAAA fecha de inicio de ciclo">            </form:input>
        <form:errors path="fechaInicial"/> <br />
        <form:label path="fechaFinal">Termina en: </form:label>
        <form:input path="fechaFinal" placeholder="DD/MM/AAAA fecha de fin de ciclo"></form:input>
        <form:errors path="fechaFinal"/> <br />
        <input type="submit" value="Guardar" />
    </form:form>
</body>

那么,我的代码有问题吗?

更新 10-26-2016 以回答 nowszy94 发表的评论

为了解决我做了:

文件消息,位于位置:

src/main/resources/messages/messages.properties

及其内容(与本期相关):

typeMismatch.fechaInicial = La fecha debe tener el formato DD/MM/AAAA 
typeMismatch.fechaFinal = La fecha debe tener el formato DD/MM/AAAA
fecha.empty = Debe indicar una fecha
fecha.anterior = La fecha debe ser anterior
fecha.invalid = Fecha obligatoria en formato: DD/MM/AAAA 

我记得,每条错误消息的顺序都很重要。

现在进行配置,在你的应用上下文 xml 文件中配置这个 bean:

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages/messages" />
</bean>

【问题讨论】:

    标签: spring validation


    【解决方案1】:

    我终于找到了发生的事情。我的控制器中有一个活页夹来格式化日期值,搜索和阅读我在验证发生时发现的很多网站,在调用绑定之前弹出,并且绑定是发生转换错误的时间,所以它永远不会接受验证消息.

    解决方案,添加另一个消息文件并配置为默认消息源,因此其消息适用于绑定和验证,现在所有消息都可以正常工作。

    【讨论】:

    • 我知道可能有点晚了,但您能否提供该解决方案的代码示例?
    • 当然,实际上我是因为管理问题离开了这个项目,所以我忘记了这段代码的细节,无论如何再次检查,我发现代码处于解决这个问题的状态,请检查原始问题中的更新,我希望这会有所帮助。
    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 2019-02-22
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    相关资源
    最近更新 更多