我使用Spring MVC 3.0与sitemesh和spring消息包。例如,我有以下几点:如何捕捉弹出消息JstTagException?
<spring:message code="nav.item.name"/>
如果nav.item.name没有在我的资源文件存在,我收到一个空白页和JspTagException在控制台中,我不能用我赶上@ ExceptionHandler方法。我假设我无法捕捉它,因为错误是视图渲染的一部分。我也尝试创建一个自定义HandlerInterceptorAdapter,并修改web.xml都没有成功。有趣的是,我还使用了以下标签:
<fmt:message key="nav.item.name"/>
并且视图显示页面,但带有“???????”为文本。这实际上对我来说至少可以显示页面,但我宁愿使用spring:message标记。
我的问题是:如何抓住JspTagException?
堆栈跟踪:
2011-10-12 09:31:16155 ERROR [HTTP-8080-2] RequestContextAwareTag - 无下代码 'BLAH' 找到的区域设置 'ko_KR' 消息。 javax.servlet.jsp.JspTagException:没有下代码“BLAH”的区域“ko_KR”找到的消息。 在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在org.apache.jsp.WEB_002dINF.pages.common.nav_jsp._jspService(nav_jsp.java:114)(nav_jsp.java:206) 在org.apache.jasper。 runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386) 在org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 在org.apache.jasper.servle (javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at 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) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488) at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java: 229) at org.springframework.web.servlet.view.AbstractV在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)上的org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 在org.springframework.web.servlet。在org上,javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 上的FrameworkServlet.doGet(FrameworkServlet.java:549) (javax.servlet.http.HttpServlet.service(HttpServlet.java:617) )。 apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在org.apache.catalina.core.ApplicationFilterChain。在org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551) at 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在org.apache.jsp.WEB_002dINF.sitemesh_002ddecorators.main_jsp._jspService(main_jsp.java:138)(main_jsp.java:284) 在org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java: 70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) at 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) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) at org.apache.catalina.core.ApplicationDispatcher。 doInclude(ApplicationDispatcher.java:551) at org.apache.catalina.core.Applica tionDispatcher.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 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 。 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) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at 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) at org.apach e.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net。 JIoEndpoint $ Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source)
谢谢! Dave
感谢您的帮助。不过,我使用的动态属性,所以我需要在没有键值的存在是为了将其接住或提醒用户,而不是显示一个空白页。如果用户错误地设置我的应用程序,例如,意外删除正在使用的键值对,它将只显示一个空白页面。我会将堆栈跟踪添加到原始帖子。 – Dave
@戴夫:我已经更新了基于您的评论我的回答。看看它是否有帮助。为了完整性,我保留了部分初始答案。 – 2011-10-12 20:29:21
谢谢!! UseCodeAsDefaultMessage适用于我! – Dave