2011-06-06 8 views
6

En varios proyectos anteriores (todos anteriores a la primavera 3.0), tuve un solo error al manejar el archivo jsp (generalmente "message.jsp") que tenía una línea similar a lo siguiente:Acceso exception.class.name en primavera: etiqueta de mensaje cuando se usa SimpleMappingExceptionResolver

<spring:message code="exceptions.${exception.class.name}" text="${exception.message}"/> 

esto me permitió asignar excepciones a esta página y resolver ciertos mensajes de error localizada basado en el tipo de excepción mediante la definición de un derivado de la SimpleMappingExceptionResolver:

<bean id="exceptionMapping" class="mycode.ui.resolvers.MyExceptionResolver"> 
    <property name="exceptionMappings"> 
    <props> 
     <prop key="java.lang.Exception">message</prop> 
     <prop key="javax.servlet.ServletException">message</prop> 
     <prop key="MyCustomException">message</prop> 
     <prop key="ApplicationAuthorizationException">login</prop> 
     <prop key="NotLoggedInException">login</prop> 
    </props> 
    </property> 
</bean> 

esto funcionó sin problemas hasta Intenté actualizar a S Pring 3 y Tomcat 7. Ahora, cuando se utiliza este código, me sale el siguiente error:

"${exception.class.name}" contains invalid expression(s): javax.el.ELException: The identifier [class] is not a valid Java identifier as required by section 1.19 of the EL specification 

Alguna idea de lo que ha cambiado o cómo acceder al nombre de la clase de la excepción (parte del modelo devuelto por la primavera de la página de error asignada)?

Respuesta

18

La implementación de EL en Tomcat 7 se ha cambiado para prohibir los literales de palabras clave de Java como class, new, static, etc. como propiedades EL.

La única solución es la medida de acceder a ellos usando la notación de refuerzo en su lugar:

${exception['class'].name} 

Ver también Tomcat issue 50147.

+0

Creo que he descubierto que usar "excepción" hace lo mismo. ¡Gracias! – pconrey

+1

Para encontrar las ocurrencias, puede usar este RegEx: (\ $ \ {) (. *?) (?

Cuestiones relacionadas