5

我将 Spring MVC 3.0 与 sitemesh 和 spring 消息包一起使用。例如,我有以下内容:

<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: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。

谢谢!戴夫

4

1 回答 1

5

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

如果您将属性text设置为某个值,它会显示该值而不是抛出异常吗?

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

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

您可以通过使用beanUseCodeAsDefaultMessage上的属性来做到这一点。MessageSource这里这里

于 2011-10-10T21:00:46.537 回答