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


2

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

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

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> <[[email protected] - 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) 

I'm с помощью JSF версии Mojarra 1.2_09, richfaces 3.2.1.GA и facelets 1.1.13.

Надежда некоторой помощь :(

  0

Не могли бы вы дать нам немного больше деталей? Какую реализацию вы используете и как настроена ваша система обработки ошибок. 23 сен. 082008-09-23 20:59:59

  0

Я повторно отредактировал эту проблему. Взгляни, пожалуйста. ;) 23 сен. 082008-09-23 21:20:56

2

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

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

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

  0

Спасибо за ответ. На самом деле это печально. Хорошая рекомендация, что мы уже следим, но проблема по-прежнему идет. Точка точно поймает все, чтобы избежать такого поведения. :( Спасибо. 23 сен. 082008-09-23 21:19:47

  0

Хорошо, что я видел в своем приложении, где иногда загружалась страница. Причина была найдена как слишком много файлов, открытых в моем приложении в действиях bg, и потоки файлов в некоторых местах не закрывались 04 апр. 102010-04-04 15:23:11


1

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

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

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

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

  0

Nice! Спасибо, человек. 18 фев. 112011-02-18 13:58:56


-1

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

  0

Его 1.2.09, а не JSF 2. 04 янв. 132013-01-04 15:34:52

  0

Я написал это для людей, приземляющихся здесь после поиска, в 2012 году они могут использовать JSF 2. Вот почему я указал, что это относится к JSF 2. Но в любом случае спасибо за downvote ... 07 янв. 132013-01-07 15:33:10