2011-06-30 12 views
5

Spring 3.0 MVCprimavera 3,0 MVC parece ignorar messages.properties

En primer lugar, no he encontrado ninguna documentación relativa a messages.properties @springsource Todo lo que he encontrado acerca de los mensajes de error primordiales ha estado en varios foros. Si alguien tiene una referencia a donde se documenta messages.properties, sería fantástico. Tal vez messages.properties no proviene de la primavera sino de una especificación de Java.

He tratado siguiendo el consejo de JSR-303 Type Checking Before Binding Mi objetivo es reemplazar algunos mensajes de error de coincidencia de tipos con mis propios mensajes de error fáciles de usar

Mi situación es la siguiente:

Modelo

public class Test { 

    private int numberbomb; 

    public int getNumberbomb() { 
     return numberbomb; 
    } 

    public void setNumberbomb(int numberbomb) { 
     this.numberbomb = numberbomb; 
    } 
} 

myservlet.xml

<mvc:annotation-driven/> 

JSP

<form:form id="test" method="post" modelAttribute="test"> 

<form:errors path="*"/> 

<form:label path="numberbomb">numberbomb</form:label> 
<form:input path="numberbomb"/> 

</form:form> 

clases \ messages.properties

typeMismatch=bad value you bad bad person 
test.numberbomb=you are driving me crazy with these bad inputs 

de salida de la forma

no pudo convertir valor de la propiedad del tipo java.lang.String a int tipo requerido para la propiedad numberbomb; la excepción anidada es org.springframework.core.convert.ConversionFailedException: no se puede convertir el valor "tres" de tipo java.lang.String para escribir int; excepción anidada es java.lang.NumberFormatException: Para cadena de entrada:

BindingResult.toString() dentro de mi controlador

error "tres" Field de 'prueba' objeto en campo 'numberbomb': rechazado valor [tres]; códigos [typeMismatch.test.numberbomb, typeMismatch.numberbomb, typeMismatch.int, typeMismatch]; argumentos [org.springframework.context.support.DefaultMessageSourceResolvable: codes [test.numberbomb, numberbomb]; argumentos []; mensaje predeterminado [numberbomb]]; mensaje predeterminado [Error al convertir el valor de propiedad de tipo 'java.lang.String' al tipo requerido 'int' para la propiedad 'numberbomb'; la excepción anidada es org.springframework.core.convert.ConversionFailedException: no se puede convertir el valor "tres" de tipo "java.lang.String" para escribir "int"; la excepción jerarquizada es java.lang.NumberFormatException: Para cadena de entrada: "tres"]

está mostrando los mensajes de error con <form:errors> los mensajes de error personalizados visualización camino equivocado? ¿Debo agregar algo a los archivos de configuración de Spring para indicarle que mire messages.properties? Spring parece estar ignorando mi archivo messages.properties (que se encuentra en la carpeta WEB-INF \ classes)

¡Gracias por cualquier idea!

Respuesta

4

Un asociado mío me indicó la dirección correcta. Cambié el bean MessageSource en myservlet.xml

de

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

a

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

Por alguna razón esto solucionó el problema. Gracias asociado! :)

+1

¡Ese motivo se puede encontrar en la documentación! - http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/support/ReloadableResourceBundleMessageSource.html - "... admite la recarga de archivos de propiedades a través de la configuración" cacheSeconds ", y también mediante el borrado programático de la memoria caché de propiedades. Como los servidores de aplicaciones normalmente almacenan en caché todos los archivos cargados desde classpath, es necesario almacenar recursos en otro lugar (por ejemplo, en el directorio "WEB-INF" de una aplicación web). el classpath no se reflejará en la aplicación ". – Ross

Cuestiones relacionadas