Пустая страница в JSF - PullRequest
       16

Пустая страница в JSF

2 голосов
/ 24 сентября 2008

Если мой код выдает исключение, иногда - не каждый раз - jsf представляет пустую страницу. Я использую Facelets для макета. О подобной ошибке сообщалось в этом сообщении Sun forumn , но без ответов. Кто-нибудь еще с той же проблемой, или есть решение? ;)

Из-за некоторых запросов. Здесь следуйте больше данных:

web.xml

 <error-page>
        <exception-type>com.company.ApplicationResourceException</exception-type>
        <location>/error.faces</location>
 </error-page>

А стек, связанный с jsf, печатается после реального исключения:

####<Sep 23, 2008 5:42:55 PM GMT-03:00> <Error> <HTTP> <comp141> <AdminServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1222202575662> <BEA-101107> <[weblogic.servlet.internal.WebAppServletContext@6d46b9 - appName: 'ControlPanelEAR', name: 'ControlPanelWeb', context-path: '/Web'] Problem occurred while serving the error page.
javax.servlet.ServletException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:249)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)
    at weblogic.servlet.internal.ForwardAction.run(ForwardAction.java:22)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.ErrorManager.handleException(ErrorManager.java:144)
    at weblogic.servlet.internal.WebAppServletContext.handleThrowableFromInvocation(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2053)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
javax.faces.application.ViewExpiredException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:180)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)

Я использую версию jsf Mojarra 1.2_09, richfaces 3.2.1.GA и facelets 1.1.13.

Надеюсь на помощь: (

Ответы [ 3 ]

2 голосов
/ 24 сентября 2008

Я думаю, что это во многом зависит от вашей реализации JSF. Я слышал, что некоторые будут отображать пустые экраны.

Тот, который мы использовали, генерировал ошибку 500 с трассировкой стека. Другие кнопки времени ожидания не будут работать без каких-либо ошибок для пользователя. Это было все на нашей стадии разработки.

Но лучший совет, который я могу вам дать, - перехватывать исключения и записывать их в журнал ошибок, чтобы у вас была трассировка стека для последующей отладки. Для сообщений, о которых мы ничего не можем сделать, например, если сервер не работает, мы просто добавим фатальное сообщение в FacesContext, которое будет отображаться на экране, и зарегистрируем трассировку стека.

1 голос
/ 11 февраля 2011

Я исправил подобную проблему на моей error.jsp странице сегодня. Это не будет точно так же, как у вас, но это может указать кому-то в правильном направлении, если у них возникнут аналогичные проблемы. Кажется, моя проблема исходила из двух разных источников.

Во-первых, свойство исключения message не было установлено в некоторых сервлетах, которые генерировали исключения, обнаруженные страницей ошибок. Сервлеты перехватывали и перебрасывали исключения, используя конструктор ServletException(Throwable rootCause).

Во-вторых, на самой странице ошибки первоначальный автор использовал код скриптлета для анализа сообщения с использованием String.split(message, ";"); Поскольку сообщение было null, это не удалось. Я получаю NullPointerException в своем журнале ошибок вместе с сообщением «Возникла проблема при обслуживании страницы ошибки».

Эти две вещи объединились, чтобы дать мне пустую страницу по URL сервлета, который выдавал исходное исключение. Я исправил свою проблему, предоставив свое собственное сообщение об ошибке, когда я перебрасывал исключения в моих сервлетах, используя конструктор ServletException(String message, Throwable rootCause), поэтому сообщение об ошибке больше не будет null. Я также переписал страницу error.jsp, используя EL вместо кода скриптлета, но это не было строго необходимо.

0 голосов
/ 04 января 2013

Для пустой страницы в JSF 2, установите точку останова в ExceptionHandlerWrapper.handle или класс, переопределяющий этот метод. В моем случае это было связано с нестандартным кодом, который был слишком строгим, и ошибка не была зарегистрирована.

...