繁体   English   中英

如何在Spring / MVC 3.0应用程序中使用带有切片的常见错误页面模板?

[英]How do I have common error page templates with tiles in a Spring/MVC 3.0 app?

我有一个Spring MVC / 3.0应用程序使用tile作为它的视图,这工作正常,但我无法弄清楚如何让错误页面也使用tile。

我在我的web.xml

<error-page>
  <error-code>404</error-code>
  <location>/WEB-INF/error/404.jsp</location>
</error-page>

作为一个普通的视图不使用tile工作正常,但是当我将位置更改为其中一个视图名称时,找不到视图并呈现普通的错误页面。

我的视图的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>

我怀疑这是因为视图不是来自弹簧本身?

您需要在web.xml中添加“layouted”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>

在tile中定义错误模板会更简单:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM