четверг, июня 17, 2010

Apache Tiles 2, isError="true"

Исходные данные: Spring MVC, Tiles, JSP. Нужно сделать страницу с ошибкой "ресурс не найден", чтобы без редиректа на страницу ошибки, и чтобы не только текст с использованием шаблона сайта, но и соответствующей http ошибкой. Страница эта, естественно, наследуется от общего шаблона, например

<definition name="base" template="/WEB-INF/layouts/base.jsp">
    <put-attribute name="content" value="" type="string" />
</definition>
<definition name="notfound" extends="base" >
    <put-attribute name="content" value="/WEB-INF/views/notfound.jsp"type="template" />
</definition>

Казалось бы, вроде обычный jsp, поэтому мог бы прокатить скриптлет прямо в /WEB-INF/views/notfound.jsp:

<%response.setStatus(response.SC_NOT_FOUND); %>


Ан нет. HttpServletResponse уже сформирован, setStatus в пролете.
Вариант <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" %> тоже не пройдет - получите эксепшен.

В Spring я перекладываю эту работу на контроллер. Как-то так:
@RequestMapping(value="/qwe/{asd}",method=RequestMethod.GET)
 public ModelAndView getQwe(@PathVariable("asd") String asd,
   HttpServletResponse response) throws Exception { 
  ModelAndView mod=new ModelAndView("notfound");
  response.setStatus(response.SC_NOT_FOUND);
  return mod; 
}

Комментариев нет:

Мой список блогов