我将 Spring MVC 3.0 与 sitemesh 和 spring 消息包一起使用。例如,我有以下内容:
<spring:message code="nav.item.name"/>
如果我的资源文件中不存在 nav.item.name,我会在控制台中收到一个空白页面和一个 JspTagException,我无法用我的 @ExceptionHandler 方法捕获它。我假设我无法捕捉到它,因为错误是 View 渲染的一部分。我还尝试创建一个自定义的 HandlerInterceptorAdapter,并修改 web.xml 都没有成功。有趣的是,我还使用了以下标签:
<fmt:message key="nav.item.name"/>
View 显示页面,但带有“???????”为文本。这实际上对我来说更容易接受,至少显示页面,但我宁愿使用 spring:message 标签。
我的问题是:如何捕获 JspTagException?
堆栈跟踪:
2011-10-12 09:31:16,155 错误 [http-8080-2] RequestContextAwareTag - 在语言环境“ko_KR”的代码“BLAH”下找不到消息。
javax.servlet.jsp.JspTagException:在语言环境“ko_KR”的代码“BLAH”下找不到任何消息。
在 org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:184)
在 org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
在 org.apache.jsp.WEB_002dINF.pages.common.nav_jsp._jspx_meth_spring_005fmessage_005f0(nav_jsp.java:206)
在 org.apache.jsp.WEB_002dINF.pages.common.nav_jsp._jspService(nav_jsp.java:114)
在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
在 org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
在 org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
在 org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:229)
在 org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
在 org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
在 org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
在 org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
在 org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
在 org.apache.jsp.WEB_002dINF.sitemesh_002ddecorators.main_jsp._jspx_meth_form_005fform_005f0(main_jsp.java:284)
在 org.apache.jsp.WEB_002dINF.sitemesh_002ddecorators.main_jsp._jspService(main_jsp.java:138)
在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
在 org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
在 org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
在 com.opensymphony.sitemesh.compatability.OldDecorator2NewDecorator.render(OldDecorator2NewDecorator.java:46)
在 com.opensymphony.sitemesh.webapp.decorator.BaseWebAppDecorator.render(BaseWebAppDecorator.java:33)
在 com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:84)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
在 org.apache.tomcat.util.net.JioEndpoint$Worker.run(JioEndpoint.java:489)
在 java.lang.Thread.run(未知来源)
谢谢!
戴夫
我是一名优秀的程序员,十分优秀!