Problem with Exception pages in icefaces 1.7
[Logo]
ICEsoft.org Forums: ICEfaces, ICEmobile, ICEpdf
[Search] Search   [Recent Topics] Recent Topics   [Groups] Home Page | www.icefaces.org  [Register] Register  [Login] Login 
Problem with Exception pages in icefaces 1.7  XML
Forum Index -> Development Build Feedback Go to Page: 1, 2 Next 
Author Message
leleboy


Joined: 31/08/2007 00:00:00
Messages: 20
Offline


We are using icefaces 1.7 with Jboss 4.2.2GA and Tomcat 6.

Since we changed from 1.6.2 to 1.7 when the application throws an exception (e.g.: NullPointerException) instead of showing our Error Page, a blank page is shown with the following text: WQ9t9D5mZid5iFTYCszfw:1:marker-script'.asElement().parentNode.bridge = 'placeholder';

We did not have this problem with 1.6.2 (the same error pages were shown properly)

What could be the problem we are facing here?


exceptionErrorPage.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
<title></title>
</head>
<body>
<jsp:forward page="exceptionErrorPage.iface" />
</body>
</html>


exceptionErrorPage.jspx

<f:view xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ice="http://www.icesoft.com/icefaces/component">
<ice:outputDeclaration doctypeRoot="HTML" doctypePublic="-//W3C//DTD HTML 4.01 Transitional//EN" doctypeSystem="http://www.w3.org/TR/html4/loose.dtd"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
<title><ice:outputText value="#{labels.get['pageTitle']}" /></title>
<ice:outputStyle href="../resources/css/icefaces_style.css"/>
</head>
<body>
<ice:form>
<ice:outputText value="An error has ocurred"/>
</ice:form>
</body>
</html>
</f:view>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

<display-name>test</display-name>
<description>test</description>

<context-param>
<param-name>com.icesoft.faces.debugDOMUpdate</param-name>
<param-value>false</param-value>
</context-param>

<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
<description>
State saving method: "client" or "server" (= default)
See JSF Specification 2.5.2
</description>
</context-param>

<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jspx</param-value>
</context-param>

<context-param>
<param-name>com.icesoft.faces.uploadDirectory</param-name>
<param-value>upload</param-value>
</context-param>

<!-- concurrent DOM views -->
<context-param>
<param-name>com.icesoft.faces.concurrentDOMViews</param-name>
<param-value>false</param-value>
</context-param>

<!-- Asynchronous Updates -->
<context-param>
<param-name>com.icesoft.faces.synchronousUpdate</param-name>
<param-value>false</param-value>
</context-param>

<!--Compression-->
<context-param>
<param-name>com.icesoft.faces.compressResources</param-name>
<param-value>true</param-value>
</context-param>

<listener>
<listener-class>com.icesoft.faces.util.event.servlet.ContextEventRepeater</listener-class>
</listener>

<!-- file upload Servlet -->
<servlet>
<servlet-name>uploadServlet</servlet-name>
<servlet-class>com.icesoft.faces.component.inputfile.FileUploadServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>

<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
<servlet-name>Persistent Faces Servlet</servlet-name>
<servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>

<servlet>
<servlet-name>Blocking Servlet</servlet-name>
<servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>

<!-- extension mapping -->

<servlet-mapping>
<servlet-name>uploadServlet</servlet-name>
<url-pattern>/uploadHtml</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>Persistent Faces Servlet</servlet-name>
<url-pattern>*.iface</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>Persistent Faces Servlet</servlet-name>
<url-pattern>/xmlhttp/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>Blocking Servlet</servlet-name>
<url-pattern>/block/*</url-pattern>
</servlet-mapping>

<session-config>
<session-timeout>30</session-timeout>
</session-config>

<welcome-file-list>
<welcome-file>secure/default.jsp</welcome-file>
</welcome-file-list>

<error-page>
<error-code>404</error-code>
<location>/exceptionErrorPage.iface</location>
</error-page>

<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/exceptionErrorPage.iface</location>
</error-page>

</web-app>


[Email]
philip.breau


Joined: 08/05/2006 00:00:00
Messages: 2675
Offline


Hi,

The bridge is disposed and shuts down on a server error, so trying to forward to another another ICEfaces page won't work. Try using a redirect instead of a forward in your jsp.

Philip

.
leleboy


Joined: 31/08/2007 00:00:00
Messages: 20
Offline


Thanks for your quick answer, but we tried this and did not work. Here is our code:

exceptionErrorPage.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
<title></title>
</head>
<body>
<% response.sendRedirect("/exceptionErrorPage.iface"); %>
</body>
</html>

Any idea?

Leleboy
[Email]
VHristov

Joined: 07/02/2008 00:00:00
Messages: 10
Offline


Hi all,

We just switched from icefaces 1.6.2 to 1.7.0 and we have the same problem. After an exception is thrown by the application, the user should be redirected to a error page, but all we get is:

Code:
 ="9uyiWfbBrAFvo2sP9fRWvQ:1:marker-script" type="text/javascript">'9uyiWfbBrAFvo2sP9fRWvQ:1:marker-script'.asElement().parentNode.bridge = 'placeholder';
 


I tried changing the contents of the error page and now it's as simple as Code:
 <html>
 <body>
 error
 </body>
 </html>
 


but still the above mentioned output is shown.

The web.xml says:

Code:
 	<error-page>
 	    <exception-type>java.lang.Exception</exception-type>
 	    <location>/exception.iface</location>
 	</error-page>	


Following is the exception that is thrown
Code:
Apr 21, 2008 2:59:14 PM com.sun.faces.lifecycle.ProcessValidationsPhase execute
 WARNING: javax.el.PropertyNotFoundException: /usermanagement/updateUser.xhtml @25,72 value="#{UsermanagementController.tmpUser.name}": Target Unreachable, 'tmpUser' returned null
 javax.faces.el.PropertyNotFoundException: javax.el.PropertyNotFoundException: /usermanagement/updateUser.xhtml @25,72 value="#{UsermanagementController.tmpUser.name}": Target Unreachable, 'tmpUser' returned null
 	at javax.faces.component.ValueBindingValueExpressionAdapter.getType(ValueBindingValueExpressionAdapter.java:81)
 	at com.icesoft.faces.renderkit.dom_html_basic.DomBasicInputRenderer.getConvertedValue(DomBasicInputRenderer.java:89)
 	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:943)
 	at javax.faces.component.UIInput.validate(UIInput.java:868)
 	at javax.faces.component.UIInput.executeValidate(UIInput.java:1078)
 	at javax.faces.component.UIInput.processValidators(UIInput.java:670)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIForm.processValidators(UIForm.java:229)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
 	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:672)
 	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
 	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)
 	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:132)
 	at com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:17)
 	at com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCyclePartial(ReceiveSendUpdates.java:64)
 	at com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:40)
 	at com.icesoft.faces.webapp.http.core.ViewBoundServer.service(ViewBoundServer.java:65)
 	at com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:44)
 	at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer$Matcher.serviceOnMatch(PathDispatcherServer.java:50)
 	at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:19)
 	at com.icesoft.faces.webapp.http.servlet.ContinuationAdaptingServlet.service(ContinuationAdaptingServlet.java:29)
 	at com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:29)
 	at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:139)
 	at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:35)
 	at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
 	at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
 	at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:79)
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
 	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
 	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:343)
 	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
 	at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:54)
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 	at java.lang.Thread.run(Thread.java:619)


Does anyone have a clue how we can fix this?
philip.breau


Joined: 08/05/2006 00:00:00
Messages: 2675
Offline


Looks like this is a regression in 1.7 (http://jira.icefaces.org/browse/ICE-3007). Should be fixed now if you want to grab the head off of svn.

Philip

.
leleboy


Joined: 31/08/2007 00:00:00
Messages: 20
Offline


Thank you very much Philip!
[Email]
VHristov

Joined: 07/02/2008 00:00:00
Messages: 10
Offline


Yes - that worked indeed! Thanks! It now works even better than in 1.6.2 ;)

Cheers
Vassil
landbo

Joined: 26/02/2007 00:00:00
Messages: 32
Offline


I am using the Eclipse plugin.

Can you tell me how I could include/integrate the version that works?

VHristov

Joined: 07/02/2008 00:00:00
Messages: 10
Offline


Well I'm using subversive and you probably have subclipse, so I can't tell you how exactly to do this. But basically you have to create a new svn location (the url is http://anonsvn.icefaces.org/repo). From there you need to check out icefaces/trunk/icefaces as a local project and when you're done start the ant script in the root folder (build.xml) -> done. That's at least how I did it and it worked :) Hope it works for you too!

Philip, when do you plan to release 1.7.1? While building the HEAD version myself is ok while we're in development, but it's not an acceptable solution for an official release :(

Cheers
Vassil
VHristov

Joined: 07/02/2008 00:00:00
Messages: 10
Offline


Hi again,

unfortunately it turned out that the above mentioned solution didn't work after all. While the version I got (rev. 16477) worked fine for the exception handling, today I noticed a weird behaviour: on a certain (not on all) xhtml page I have a data table with a list of objects that looks something like that:

Code:
 <ice:dataTable value="#{SomeController.someObjectList}" var="item">
 	<ice:rowSelector multiple="false" toggleOnClick="false" />
 	
 	<ice:column>
 		<f:facet name="header">ID</f:facet>
     		<ice:commandLink action="#{SomeController.getObjectDetails}">
 			#{item.id}
 			<f:setPropertyActionListener target="#{SomeController.currentObject}" value="#{item}"/>
 		</ice:commandLink>
 	</ice:column>
 
 	<ice:column>
 		<f:facet name="header">Name</f:facet>
     
 		<ice:commandLink action="#{SomeController.getObjectDetails}">
 			#{item.name}
 			<f:setPropertyActionListener target="#{SomeController.currentObject}" value="#{item}"/>
 		</ice:commandLink>       
 	</ice:column>
 </ice:dataTable>
 


However when I click on one of the command links (the ones in the table or in navigation) nothing happens. (Yet when I click on a command button, all works fine). I've put a System.out line in the getObjectDetails method, which was not printed. Unfortunately I cannot give you any more information on that one, since I'm absolutely cluesless myself. The only thing is that I get the following exception, when refreshing the page multiple times:

Code:
 java.lang.NullPointerException
 	org.apache.catalina.connector.Request.setAttribute(Request.java:1424)
 	org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503)
 	com.icesoft.faces.webapp.http.servlet.ServletRequestAttributes.setAttribute(ServletRequestAttributes.java:28)
 	com.icesoft.faces.webapp.http.servlet.ServletEnvironmentRequest.setAttribute(ServletEnvironmentRequest.java:216)
 	com.icesoft.faces.webapp.http.servlet.ServletRequestAttributeMap.setAttribute(ServletRequestAttributeMap.java:25)
 	com.icesoft.faces.context.AbstractCopyingAttributeMap.putAll(AbstractCopyingAttributeMap.java:30)
 	com.icesoft.faces.webapp.http.servlet.ServletExternalContext.updateOnPageLoad(ServletExternalContext.java:134)
 	com.icesoft.faces.context.View$6.servlet(View.java:123)
 	com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.detectEnvironment(ServletRequestResponse.java:222)
 	com.icesoft.faces.context.View.updateOnPageRequest(View.java:111)
 	com.icesoft.faces.webapp.http.core.SingleViewServer.service(SingleViewServer.java:43)
 	com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer$Matcher.serviceOnMatch(PathDispatcherServer.java:50)
 	com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:19)
 	com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet.java:19)
 	com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:29)
 	com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:139)
 	com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:35)
 	com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
 	com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
 	com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:79)
 	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 


I thought that it could be a compile error or something or that you already fixed this, so I checked out the newest version (16498) and indeed the error did not occur any more. However, exception handling doesn't work for me again. When an error is thrown during executionPhase, I get the pop-up saying 'Connection to server lost. Hit the browser refresh button, or the button below' or something like that. And consequently refreshing the same page just keeps on throwing the same error. (The page I'm refering to contains a field bound to an objects name, yet the object is null. So when I enter some text in the field and change the focus, the app tries to call the setter of the objects that is null).

Do I have another option, except switching back to 1.6.2? :(
Baleyba

Joined: 16/11/2006 00:00:00
Messages: 110
Offline


Hi,

I get the same problem :(

I get the svn version from the day. revision 16510
I had the same issue than you but now redirection don't work again. I get the ICEfaces component status to this: http://component-showcase.icefaces.org/component-showcase/xmlhttp/css/xp/css-images/connect_disconnected.gif
And no redirection to my error.jsp file.

It was working before this version 1.7.0.

regards
Bal.

JBoss 4.2.3 | Java 1.6.0_16 | IceFaces 1.8.2
Kylt

Joined: 21/01/2008 00:00:00
Messages: 10
Offline


Hi all,
we have the same issue as well.

I am sorry if I haven't read all news but is there any update for version 1.7.1 release.

Edit: Or at least a useable solution?

=========

Sorry for spelling misstakes -> young German developer (=
sixtyfour

Joined: 18/06/2008 00:00:00
Messages: 1
Offline



hi folks

we had exactly the same stack trace as shown above.

the problem was the name of faces servlet in web.xml. we declared it as "FacesServlet" instead of "Faces Servlet".

<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

ICEfaces seems to rely on the correct name.
jleidgen

Joined: 25/04/2008 00:00:00
Messages: 19
Offline


Hi,
we are still having some problems with this in 1.7.1 (using facelets):
When using a JSF/Icefaces .jspx-Page as the <location> of the <error-page>, it seems to work fine, all exceptions get caught and the user only sees the error-page. In some situations we may want to display some information coming from the exception, like it's message (Exception.getMessage()).

But: I haven't found a way to access any information about the exception from inside the error-page .jspx.
Most information i find on the net on this is still talking about basic JSP and they always use #{exception}, which doesn't seem to be defined in my .jspx, even when used as an error-page.

Then i tried using a plain old servlet instead, and this is where it got really funky: When using my servlet-path (e.g. "/ErrorServlet") as the location of the error-page, my servlet never was called when an exception was thrown. Instead i am back to the container default-exception-page that was displayed without any error-pages. Sometimes, when i hit reload often enough, the request seems to go through to my servlet, but it never does on the first try, when the exception really happens.

So, basically, all i want is a way to access information about/from the exception that was thrown, be it from inside the .jspx-page, a backing bean, a servlet, a plain old jsp-page or whatever. Just some way to show an error-page that is _both_ user-friendly _and_ still contains some useful information from the exception.
Is this somehow possible? Any hints?

Regards,
jleidgen
ansel1


Joined: 07/11/2006 00:00:00
Messages: 85
Offline


We were able to access the exception object from the request scope, under the key "javax.servlet.error.exception". Works great.
 
Forum Index -> Development Build Feedback Go to Page: 1, 2 Next 
Go to:   
Powered by JForum 2.1.7ice © JForum Team