Spring + Tiles - Показать страницу с ошибкой без изменения URL? - PullRequest
1 голос
/ 24 января 2012

Как мне показать пользователям общую страницу с ошибкой (например, 404) без изменения URL-адреса в браузере?

Так, например, если пользователь переходит на страницу /happy/fun/times, но в моем веб-приложении нет такого представления / отображения таких плиток, я хочу, чтобы URL оставался как /happy/fun/times, но отображал бы их представление плиток /error/404 вместо этого.

Кроме того, на соответствующей заметке, как бы я сделал это со всеми ошибками, такими как 500 ошибок или 403 ошибки? Или даже исключения, которые как-то могут пройти?

Я пытался использовать web.xml для выполнения следующих действий:

<error-page>
    <error-code>500</error-code>
    <location>/error/500</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/error/404</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/error/403</location>
</error-page>
<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/error/general</location> 
</error-page>

однако это не похоже на работу. Если я хочу, я могу изменить местоположение на «/WEB-INF/jsp/error/404.jsp», тогда ошибки 404 перехватываются в файле web.xml. Однако затем он просто отображает содержимое файла «404.jsp» вместо представления «плитки» / error / 404, которое я действительно хочу отобразить.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Как я это сделал, с помощью следующего кода:

/ WEB-INF / jsp / error / 404.jsp:

<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<!-- insert the view -->
<tiles:insertDefinition name="baseLayout" > 
    <tiles:putAttribute name="body" value="<p> Error 404!! </p>" />
</tiles:insertDefinition>

web.xml:

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/jsp/error/500.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/error/404.jsp</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/WEB-INF/jsp/error/403.jsp</location>
</error-page>
0 голосов
/ 24 января 2012

Это можно сделать для обработки исключений по типу

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/WEB-INF/jsp/error/uncaughtException.jsp</location>
</error-page>

или для обработки по коду ошибки HTTP

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/error/404.jsp</location>
</error-page>

Если вы хотите разрешить контроллер пружины или представление пружиныисключение, то вам нужно объявить bean-компонент Spring типа SimpleMappingExceptionResolver.

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" p:defaultErrorView="uncaughtException">
    <property name="exceptionMappings">
        <props>
            <prop key=".DataAccessException">dataAccessFailure</prop>
            <prop key=".NoSuchRequestHandlingMethodException">resourceNotFound</prop>
            <prop key=".TypeMismatchException">resourceNotFound</prop>
            <prop key=".MissingServletRequestParameterException">resourceNotFound</prop>
        </props>
    </property>
</bean> 

На странице JSP вы можете получить доступ к экземпляру исключения через $ {exception}.

...