-
1. Re: Individual Seam Exception Handling 2 different Apps in same web-context
figwam Dec 17, 2010 4:35 AM (in response to figwam)No one an idea? I would really appreciate it! thx
-
2. Re: Individual Seam Exception Handling 2 different Apps in same web-context
aareshchanka Dec 18, 2010 11:42 AM (in response to figwam)The main thing is that you do not have 2 applications for now you have 1, and exceptions from both would be managed samely to 1 error page that will be configured in pages.xml.
You should create ear to have 2 independent applications.
-
3. Re: Individual Seam Exception Handling 2 different Apps in same web-context
figwam Dec 19, 2010 7:14 AM (in response to figwam)Thanks for your reply Alex,
i have an EAR so the full structure of the app looks like this:
my.ear |-META-INF |-application.xml |-lib |-some.jar |-my-both-super-apps.war |-/WEB-INF/pages.xml |-/app1 |-/error.xhtml |-/app2 |-/error.xhtml |-error.xhtml
I know i can solve the problem, if i extract the app1 and app2 to different war's or war's inside different ear's.
But this is the last solution i want to do for many reasons. So i actully hope, that my problem can be solved in some
configurable way without change the file-structure.Any advise is appriciated, thx!
-
4. Re: Individual Seam Exception Handling 2 different Apps in same web-context
kragoth Dec 19, 2010 7:07 PM (in response to figwam)I could be wrong here and I don't really want to go check if this works or not but...
<exception class="javax.faces.application.ViewExpiredException"> <redirect view-id="/error.xhtml"> <message severity="warn">Your session has timed out, please try again</message> </redirect> </exception>
Why not change the redirect view-id to an EL expression that will determine the correct page?
<exception class="javax.faces.application.ViewExpiredException"> <redirect view-id="#{SomeBean.contextOfThisRequest}/error.xhtml"> <message severity="warn">Your session has timed out, please try again</message> </redirect> </exception>
Then just use standard calls to facesContext or the request objects to work out the context.
Alternatively instead of redirecting directly to your error page. Redirect to a servlet that can work out which page to go to based on the request/response objects.
There are many ways of doing this and in fact it could all be done in pages.xml with a decent EL expression.
Something like
#{facesContext.externalContext.requestContextPath/error.xhtml}
might actually be all you need.
Play around with this and see if it helps.
-
5. Re: Individual Seam Exception Handling 2 different Apps in same web-context
figwam Dec 21, 2010 7:16 AM (in response to figwam)Hi Tim,
thank you for you good ideas!
I tried the following:
1. IDEA1
<exception class="javax.faces.application.ViewExpiredException"> <redirect view-id="#{SomeBean.contextOfThisRequest}/error.xhtml"> <message severity="warn">Your session has timed out, please try again</message> </redirect> </exception>
This is not possible, cause the view-id must match url-pattern or EL-expression. Therefor
#{SomeBean.contextOfThisRequest}/error.xhtml
is not allowed.
2. IDEA2
Alternatively instead of redirecting directly to your error page. Redirect to a servlet that can work out which page to go to based on the request/response objects.
Ok, redirect to a Servlet and then the servlet redirects to error page?
3. IDEA3
I also tried the following one:
The Url Resolver class:
package com.swisscom.mib.util; import javax.faces.context.FacesContext; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; @Name("exceptionUrlResolver") public class ExceptionUrlResolver { @In private FacesContext facesContext; public String getErrorPage() { try { return facesContext.getViewRoot().getId().split("/")[1]+"/error.xhtml"; } catch (Exception e) { return "/error.xhtml"; } } }
and in pages.xml (I throw a null pointer, just for test):
<exception class="java.lang.NullPointerException"> <redirect view-id="#{exceptionUrlResolver.errorPage}"> <message severity="error">NullPointerException error, please try again</message> </redirect> </exception>
The problem what I get is in the exceptionUrlResolver-Bean. This Bean
does not have an FacesContext. The instance ends up in MockFacesContext of the
Seam Framework. And the getViewRoot is then 'null' :(Does anyone have more ideas, or is it just 'Mission Impossible'?
thx
regards Alex -
6. Re: Individual Seam Exception Handling 2 different Apps in same web-context
figwam Jan 6, 2011 4:47 AM (in response to figwam)Hi,
after trying many ways/idias and spending a lot of time to archieve my requirement,
i came to the conclusion that this is impossible.The only solution: I did pack both web-applications in two separate war-files inside the EAR.
regards
Alex