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

余生长醉 提交于 2019-11-27 23:39:09

问题


I have a Spring MVC/3.0 app using tiles as it's view, this is working fine however I can't figure out how to get the error pages to also use tiles.

I have in my web.xml

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

which works fine as an ordinary view NOT using tiles, however when I change the location to one of the view names, the view is not found and renders the ordinary error page.

My tiles.xml file for the view contains the following definition

<definition name="404" extends="standardLayout">
  <put-attribute name="body" value="/WEB-INF/error/404.jsp" />
</definition>

I'm configuring tiles through spring as follows:

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

I'm suspecting this is all due to the view not coming from spring itself?


回答1:


You need to add the "layouted" jsp in your web.xml. Below is the explaination code:

// 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:


It would be just simpler to define error template in tiles:

<definition name="error/*" template="/views/error/layout.jsp">
    <put-attribute name="body" value="/views/error/{1}.jsp" />
</definition>

And handle that with Spring MVC, e.g.:

@ExceptionHandler({ MissingResourceException.class })
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleMissingResource(Exception e) {
    return "error/404";
}

In this case, you don't have to add error pages to your web.xml, and one .jsp file per error page will suffice.



来源:https://stackoverflow.com/questions/3552515/how-do-i-have-common-error-page-templates-with-tiles-in-a-spring-mvc-3-0-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!