Исключение доступа.класс.имя весной: тег сообщения при использовании SimpleMappingExceptionResolver
в нескольких предыдущих проектах (все до весны 3.0) у меня была одна ошибка обработки JSP-файла (обычно "сообщение.jsp"), который имел строку, подобную следующей:
<spring:message code="exceptions.${exception.class.name}" text="${exception.message}"/>
Это позволило мне сопоставить исключения на этой странице и разрешить некоторые локализованные сообщения об ошибках на основе типа исключения, определив производную 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>
это работало безупречно, пока я не попытался обновить до Spring 3 и Tomcat 7. Теперь, когда я использую этот код, я получаю следующую ошибку:
"${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
есть идеи, что изменилось или как получить доступ к имени класса исключения (часть модели, возвращенной весной на страницу отображенной ошибки)?
1 ответов
реализация EL в Tomcat 7 действительно была изменена, чтобы запретить литералы ключевых слов Java, такие как class
, new
, static
etcetera как свойства EL.
единственное решение, насколько это доступ к ним с помощью скобки обозначения вместо:
${exception['class'].name}
см. также Tomcat выпуск 50147.