tags:

views:

2059

answers:

6
+4  Q: 

Mixing jsp and jsf

I will elaborate somewhat. Jsf is kind-of extremely painful for working with from designer's perspective, somewhat in the range of trying to draw a picture while having hands tied at your back, but it is good for chewing up forms and listing lots of data. So sites we are making in my company are jsf admin pages and jsp user pages. Problem occurs when user pages have some complicated forms and stuff and jsf starts kickin' in.

Here is the question: I'm on pure jsp page. I need to access some jsf page that uses session bean. How can I initialize that bean? If I was on jsf page, I could have some commandLink which would prepare data. Only thing I can come up with is having dummy jsf page that will do the work and redirect me to needed jsf page, but that's kind of ugly, and I don't want to end up with 50 dummy pages. I would rather find some mechanism to reinitialize bean that is already in session with some wanted parameters.

Edit: some more details. In this specific situation, I have a tests that are either full or filtered. It's a same test with same logic and everything, except if test is filtered, it should eliminate some questions depending on answers. Upon a clicking a link, it should start a requested test in one of the two modes. Links are parts of main menu-tree and are visible on many sibling jsp pages. My task is to have 4 links: testA full, testA filtered, testB full, testB filtered, that all lead on same jsf page and TestFormBean should be reinitialized accordingly.

Edit: I've researched facelets a bit, and while it won't help me now, I'll definitely keep that in mind for next project.

+3  A: 

have you looked into using facelets? It lets you get rid of the whole JSF / JSP differences (it's an alternate and superior view controller).

It also supports great design-time semantics with the jsfc tag...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

gets translated internally to the correct JSF stuff, so you can work with your existing tools.

Tim Howland
+1  A: 

To solve this one I'd probably create a JSF fragment that only includes your form, then use a tag to include it in my JSF page.

That solution is probably a little fragile depending on your environment though.

EDIT: See Chris Hall's answer, FacesContext is not available outside the FacesServlet.

Eric DeLabar
A: 

Create a custom JSP tag handler. You can then retrieve the bean from session scope, and then initialize it on the fly. See this tutorial for more details.

MetroidFan2002
A: 

Actually, I've resolved this by removing bean from session, so it has to be generated again when jsf page is called. Then I pick up get parameters from a request in constructor.

Slartibartfast
+3  A: 

You can retrieve a managed bean inside of a tag library using something like this:

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

However, you'd need to use the tag library from one of your JSF pages. FacesContext.getCurrentInstance() returns null when it's called outside of the FacesServlet.

Chris Hall
A: 

Peace be upon you all ;

I am new working with JSF and I already having a web project that is all in jsp / servlets only but I needed to use the JSF in one issue and now i can't refrence to this jsf by normal so if anyone know a methode to solve this I 'd really appreciate it. Thanks in advance