如何在 Spring/MVC 3.0 应用中使用带有磁贴的常见错误页面模板?

2022-09-03 12:28:35

我有一个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>

我正在通过弹簧配置瓷砖,如下所示:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  <property name="definitions">
    <list>
      <value>/WEB-INF/**/tiles.xml</value>
    </list>
  </property>
</bean>

我怀疑这都是由于景观不是来自春天本身?


答案 1

您需要在Web.xml中添加“布局”jsp。以下是说明代码:

// 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文件就足够了。