Как получить общие шаблоны страниц ошибок с плитками в приложении 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>

Я подозреваю, что это все из-за того, что вид идет не из самой весны?


person Brett Ryan    schedule 23.08.2010    source источник


Ответы (2)


Вам нужно добавить "размеченный" 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>
person naikus    schedule 24.08.2010
comment
Найкус, я не могу тебя отблагодарить. Это работает как шарм. Я новичок в spring, spring -mvc, плитках, исходящих из .NET. Подобные вещи имеют большое значение, спасибо. - person Brett Ryan; 25.08.2010

Было бы проще определить шаблон ошибки в тайлах:

<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 для каждой страницы с ошибками.

person Seiya    schedule 27.05.2014