gpt4 book ai didi

spring - 如何捕获 Spring 消息 JstTagException?

转载 作者:行者123 更新时间:2023-12-02 11:45:28 25 4
gpt4 key购买 nike

我将 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(未知来源)

谢谢!
戴夫

最佳答案

您不能使用 Spring 的异常处理机制,因为它在调用中更高。 JSP 异常稍后发生。

如果您设置 the text attribute对于某个值,它是否显示该值而不是抛出异常?

要清除异常,您可以为标签提供默认消息(MessageSource.getMessage(...) 方法有一个重载,采用这样的 defaultMessage )。

如果您没有默认显示但仍想警告用户丢失的键(而不是抛出异常或白页),为什么不显示实际丢失的 code ?

您可以使用 UseCodeAsDefaultMessage 来做到这一点。 MessageSource 上的属性(property) bean 角,扁 bean 。见 herehere .

关于spring - 如何捕获 Spring 消息 JstTagException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7716412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com