On 12/21/05, Laurie Harper <[EMAIL PROTECTED]> wrote:
>
> Craig McClanahan wrote:
> > On 12/20/05, Laurie Harper <[EMAIL PROTECTED]> wrote:
> >> So I'm pretty much sold on migrating from Struts/JSPs to JSF at this
> >> point, with one remaining caveat I've yet to figure out. I've brought
> >> this up before, but haven't found a good solution yet. I think the
> >> easiest way to get what I want is to use struts-faces, but then I can't
> >> get the benefits of Shale... So, I'd like to revisit the base
> >> requirements to see if anyone can see a way to do what I want w/out
> >> Struts Action / struts-faces in the mix...
> >>
> >> My base requirement is that everything be directly addressable by a
> >> bookmark-able URL. So, for example, I'd like to have a URL like
> >> http://.../users to be rendered by /users.jsp as a list of users and,
> >> when you click on an entry in the list, you'd get taken to
> >> http://.../users/bob which would be rendered by /userInfo.jsp. For any
> >> X, the URL http://.../users/X would be rendered by /userInfo.jsp, with
> X
> >> being made available to the JSP (or backing bean) as a request
> >> parameter, request attribute or whatever.
> >>
> >> Using struts-faces, I can get what I want by using wild-card action
> >> mappings to map logical URLs to physical JSPs, passing wild-card
> matched
> >> parts of the request URL on to the view in the action; something like,
> >> roughly:
> >>
> >>    <action path="/users/*" type="myaction" forward="/user.jsp">
> >>      <set-property name="user" value="{1}"/>
> >>
> >> I need a way to get the same mapping from logical URLs to actual JSPs
> >> with vanilla JSF / Shale. Sean suggested I could try writing a custom
> >> navigation handler, but that doesn't seem to work since a navigation
> >> handler only gets to influence how from-view-id/from-outcome pairs get
> >> mapped to views.
> >>
> >> I tried setting up a front controller servlet that encapsulates the
> >> URL-to-view mapping logic, but that doesn't work because to-view-id in
> a
> >> navigation-rule is not a context relative path, so my navigation rules
> >> can't route through my controller servlet...
> >>
> >> I'm really hoping I can find a way to do this that doesn't involve
> >> deploying Struts + struts-faces as a front controller to Shale ;-) My
> >> requirements can't be *that* weird can they?
> >
> >
> > No, you just need a custom NavigationHandler, coupled with using
> <redirect/>
> > elements in your navigation rules to ensure that the URLs in the browser
> are
> > what you are after.  (See also my response to your comment on the
> myfaces
> > list too ... view identifiers for the default view handler *are* context
> > relative paths starting with a '/'.)
>
> Hmm, I'll have to take another look at navigation handlers then. I'll
> have to experiment a bit.
>
> The context relative thing is not the behaviour I'm seeing though. If I
> have a navigation rule that points to /foo/bar.jsp with redirect set,
> the browser is redirected to /faces/foo/bar.jsp.


That would imply you have FacesServlet mapped to "/faces/*", right?  This is
indeed the URL that the submit would have to go to.  If you map FacesServlet
to "*.faces" instead, the emitted URl would be "/foo/bar.faces" instead.

Maybe I can get what I
> was shooting for if I switch to suffix mapping for the Faces servlet?
> Though based on your comments on the MyFaces list, I tend to agree that
> the servlet approach I wanted this for is probably not the best idea...


That would be worth a try (see above).

> One consequence of that decision, however, is that you can't pass
> > information in request scope from one page to another (because the
> rendering
> > is done in a separate HTTP request).  Here is where Shale's view handler
> > capabilities can come in handy, however ... if you have such a backing
> bean
> > for each JSP page, it's prerender() method will be invoked immediately
> > before the page is rendered.  As such, it is pretty much analogous to a
> > "setup" action in Struts 1.x based applications, and you can use it to
> go
> > collect any model data needed to render this page.
>
> Yep, that's broadly what I was intending on doing.
>
> Thanks,
>
> L.


Craig

---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to