【发布时间】: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