Как исключить фильтр sitemesh при разрешении ошибки весной? - PullRequest
3 голосов
/ 13 мая 2011

У меня есть фильтр Sitemesh, который будет украшать страницы.Я настроил Spring * exceptionResolver так, чтобы все ошибки перешли к представлению с именем error, которое затем указывалось на WEB-INF/jsp/error.jsp - InternalResourceViewResolver.

Теперь страница с ошибками оформляется с помощью sitemesh иЯ хотел бы исключить это из украшения.Использование <exclude> тега sitemesh decorator.xml не работает.Поскольку входящий URL-адрес может быть таким же нормальным, как /app/login.html, а sitemesh уже перехватывает его и украшает его.

Я замечаю, что весной, если у меня будет @ResponseBody для запроса ajax, он будет проходить через украшение Sitemesh.,Интересно, как это работает?Могу ли я сделать что-то в errorResolver, чтобы обойти и sitemesh?

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Это может быть сделано путем добавления собственного exceptionResolver, потокового вывода вручную и возврата нуля ModelAndView

public class MyExceptionResolver extends SimpleMappingExceptionResolver{
public ModelAndView resolveException(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception ex) {

    //other things like logging...
    RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/error.jsp");
    try {
        dispatcher.forward(request, response);
        response.getOutputStream().flush();
    } catch (ServletException e) {
        log.error(e);
    } catch (IOException e) {
        log.error(e);
    }
    return null;
}
0 голосов
/ 04 августа 2011

По крайней мере в SiteMesh 3 этот тип исключаемых работ (sitemesh3.xml)

<sitemesh>
  <mime-type>text/html</mime-type>

  <mapping path="/*" decorator="/WEB-INF/sitemesh/decorator.jsp" />
  <mapping path="/app/login.html" exclude="true"/>

</sitemesh>

Это попробовали весной 3. Надеюсь, это помогло вам.

...