我有一个Sitemesh过滤器,用于装饰页面。我已经配置了一个Spring exceptionResolver
,以便所有错误都会转到名为error
的视图,然后指向WEB-INF/jsp/error.jsp
到InternalResourceViewResolver
。
现在错误页面由sitemesh修饰,我想将它从装饰中排除。使用sitemesh <exclude>
的{{1}}标记不起作用。因为传入的URL可能与decorator.xml
一样正常,而sitemesh已经捕获并装饰它。
我注意到在春天,如果我有一个/app/login.html
的ajax请求,它将通过Sitemesh的装饰。我想知道它是如何工作的?我可以在@ResponseBody
中创建一些东西来绕过sitemesh吗?
答案 0 :(得分:1)
可以通过手动输入自己的exceptionResolver
,流输出并返回null 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;
}
答案 1 :(得分:0)
至少在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>
这是在Spring 3中尝试过的。我希望这能帮到你。