Как у меня есть общие шаблоны страниц ошибок с плитками в приложении Spring/MVC 3.0?
У меня есть приложение Spring MVC/3.0, использующее плитки, поскольку оно работает нормально, но я не могу понять, как заставить страницы ошибок использовать плитки.
У меня в моем web.xml
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/error/404.jsp</location>
</error-page>
который отлично работает, поскольку обычный вид НЕ использует плитки, однако, когда я меняю местоположение на одно из имен вида, представление не найдено и отображает обычную страницу ошибок.
Мой файл tiles.xml
для представления содержит следующее определение
<definition name="404" extends="standardLayout">
<put-attribute name="body" value="/WEB-INF/error/404.jsp" />
</definition>
Я настраиваю плитки через Spring следующим образом:
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/**/tiles.xml</value>
</list>
</property>
</bean>
Я подозреваю, что все это связано с тем, что сам взгляд не из самого Spring?
Ответы
Ответ 1
Вам нужно добавить "layouted" jsp в ваш web.xml. Ниже приведен код объяснения:
// Your web.xml should look like this:
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/error/layout-404.jsp</location>
</error-page>
// Your layout-404.jsp should look like this:
<%@page isELIgnored="false" %>
<%@page contentType="text/html"%>
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="404" />
// Your layout def should look like this:
<definition name="404" extends="standardLayout">
<put-attribute name="body" value="/WEB-INF/error/404.jsp" />
</definition>
Ответ 2
Было бы проще определить шаблон ошибки в плитке:
<definition name="error/*" template="/views/error/layout.jsp">
<put-attribute name="body" value="/views/error/{1}.jsp" />
</definition>
И обработайте это с помощью Spring MVC, например:
@ExceptionHandler({ MissingResourceException.class })
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleMissingResource(Exception e) {
return "error/404";
}
В этом случае вам не нужно добавлять страницы ошибок в ваш web.xml, и один файл .jsp на страницу с ошибкой будет достаточным.