我正在开发一个Spring + Hibernate项目,我正在使用表单的验证,并且我在类路径上有ValidationMessages.properties文件,它按照我的预期工作,除了Date字段,对于Date字段,验证总是显示消息:
无法将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
我记得,每条错误信息的顺序都很重要。
现在进行配置,在你的aplication context xml文件中配置这个bean:
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages/messages" />
</bean>
答案 0 :(得分:1)
最后我发现发生了什么。我的控制器中有一个活页夹来格式化Date值,搜索和读取我在验证发生时找到的很多站点,在调用绑定之前弹出,并且在绑定时发生转换错误,因此它永远不会将消息用于验证
解决方案,添加另一个消息文件并配置为默认消息源,因此其消息适用于绑定和验证,现在所有消息都可以正常工作。