Как я могу поймать весеннее сообщение JstTagException? - PullRequest
5 голосов
/ 10 октября 2011

Я использую 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?

Stack Trace:

2011-10-12 09: 31: 16,155 ОШИБКА [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.jspWIN_F_F_F_F_EgFB или 79) at.pages.common.nav_jsp.(HttpJspBase.java:70) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:38.ache.jas.per.jas.per.j.asas.peras.jas.per.j.asas.peras.java.per.j.asas.peras.java.per.j.asas.peras.java.per.j.asas.peras.java.per.j.asas.peras.java:38.asas.j.asas.peras.java:38.asas.j.asas.peras.java:38.asg.jasg.serg) или вservlet.JspServlet.serviceJspFile (JspServlet.java:313) в org.apache.jasper.servlet.JspServlet.service (JspServlet.java:260) в javax.servlet.http.HttpServlet.service (HttpServ:7).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.Application..include (ApplicationDispatcher.java:488) в org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel (InternalResourceView.java:229) в org.springframework.web.servlet.view.AbstractView.avader (AbstractView.j) в org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1047) в org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:817) в org.sprisverdoService (DispatcherServlet.java:719) в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:644) в org.springframework.web.servlet.FrameworkServlet.doGet) в java (5).http.HttpServlet.service (HttpServlet.java:617) в javax.servlet.http.HttpServlet.206) в org.apache.catalina.core.ApplicationDispatcher.invoke (ApplicationDispatcher.java:646) в org.apache.catalina.core.ApplicationDispatcher.doInclude (ApplicationDispatcher.java:551) в org.apache.catalina.core.Application.include (ApplicationDispatcher.java:488) по адресу org.apache.jasper.runtime.JspRuntimeLibrary.include (JspRuntimeLibrary.java:968) по адресу org.apache.jsp.WEB_002dINF.sitemesh_002ddecorators.main_jsp0 (j0) .jpg_00_f0_form_j0_f0_form0_form0_form0_form0_form0_form0_form0_form0_form0_form0_for_j_0_f0в 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) at java.lang.Thread.run (неизвестный источник)

Спасибо! Dave

1 Ответ

5 голосов
/ 11 октября 2011

Вы не можете использовать механизм обработки исключений Spring, потому что он выше в вызове.Исключение JSP возникает позже.

Если для атрибута text задано какое-либо значение, будет ли отображаться это значение вместо исключения?

Чтобы очистить исключение, вы можете предоставить тегу сообщение по умолчанию (метод MessageSource.getMessage (...) имеет перегрузку, принимающую такой defaultMessage).

Если у вас нет показа по умолчанию, но вы все еще хотите предупредить пользователя о пропущенных ключах (вместо того, чтобы выдать исключение или белую страницу), почему бы не отобразить фактическое пропущенное code?

Вы можете сделать это, используя свойство UseCodeAsDefaultMessage в компоненте MessageSource.См. здесь и здесь .

...