It is possible to use https://javaserverfaces-spec-public.dev.java.net/ for enhancements.
On 6/7/06, Andrew Robinson <[EMAIL PROTECTED]> wrote:
I would have to agree. I really dislike the NavigationHandler interface. It is really inflexible. I would love if Sun could fix the specification to expose more of the functionality instead of one black box method. There really needs to be an API to retrieve the result without navigating, or at least some override to be able to modify the view ID before the view handler is called. I think you'd be best to write your own view handler (extend and existing one for ease) and in the create view method, check for parameters there. That way you can do everything you need. NavigationHandler just doesn't have what you need for this functionality. On 6/7/06, Cosma Colanicchia <[EMAIL PROTECTED]> wrote: > The <to-view-id> element is part of the <navigation-case>. But finding > the proper <navigation-case> is exactly the task that handleNavigation > method should perform.. once found one, you can call > navigationCase.getToViewId() to get the information you need. > > The problem is that the NavigationHandler specification does not need > to "return" that object, but to directly process it.. so you don't > have control over the to-view-id string before it gets translated in a > UIViewRoot object. > > I think you have to re-implement the handleNavigation method, copying > the myfaces code and adding your logic *after* it gets the correct > <to-view-id> string but *before* it creates a UIViewRoot and render > it. > > Question for myfaces devs: maybe I'm missing something, but why not > "break" the handleNavigation method in two? handleNavigation could for > example only resolve a <to-view-id> string and pass it to another one > that do the creates the view, set it as the viewroot and invoke > renderResponse().. or encapsulate all the <navigation-case> finding > logic in another method and have the handleNavigation only process the > returned <to-view-id>. This should make life easier for extending > classes. > > > Bye > Cosma > > 2006/6/6, Peter Henderson <[EMAIL PROTECTED]>: > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > Jonathan Harley wrote: > > > Cosma Colanicchia wrote: > > >> Reading that wiki post: > > >> > > >> "For these reasons [...] one should consider using a custom > > >> Navigation Handler adding the following capabilities:" > > >> > > >> I've understood that you have to code and plug your custom navigation > > >> handler to inplement this sort of navigation logic. I've never seen > > >> using EL expressions in <to-view-id> elements, anyone know if this is > > >> supported by the standard JSF nav. handler? > > > > > > No, it isn't, but it's very easy to do. See for example > > > http://forum.java.sun.com/thread.jspa?threadID=492721&messageID=2318174 > > > > > > > > > Jon. > > Thanks for that Jon > > > > > > Based on the info in that thread and the linked articles I've knocked up > > my own Navigation handler. > > The trouble is, I dont seem to be able to get the <to-view-id> part of > > the navigation rule in order to fix the parameters. > > > > > > Here is my Navigation handler. > > package com.starjar.facestest; > > > > import javax.faces.application.NavigationHandler; > > import javax.faces.context.FacesContext; > > > > /** > > * Based on > > * http://forum.java.sun.com/thread.jspa?threadID=492721&messageID=2318174 > > * > > * > > * @author peter > > */ > > public class ParameterNavigationHandler extends NavigationHandler { > > > > NavigationHandler _base; > > > > /** Creates a new instance of ParameterNavigationHandler */ > > public ParameterNavigationHandler(NavigationHandler base) { > > super(); > > System.out.println("===IN ParameterNavigationHandler ctor ="); > > this._base = base; > > } > > > > public void handleNavigation(FacesContext fc, String actionMethod, > > String actionName) { > > System.out.println("====IN ParameterNavigationHandler ="); > > > > _base.handleNavigation(fc, actionMethod, actionName); > > > > String viewId = fc.getViewRoot().getViewId(); > > System.out.println("ORIGINAL VIEW " + viewId + > > " actionMethod " + actionMethod + > > " actionName " + actionName ); > > if ((viewId.indexOf("#{") != -1) && > > (viewId.indexOf("#{") < viewId.indexOf('}'))) > > { > > String bviewId = > > (String)fc.getApplication().createValueBinding(viewId).getValue(fc); > > System.out.println("NEW VIEW id " + bviewId ); > > if (bviewId != null) { > > fc.getViewRoot().setViewId(bviewId); > > } else { > > // you can throw the exception here > > } > > } > > } > > } > > > > > > Values of fields > > viewId = /secure/company/list.jsp > > actionMethod = #{quickNewCompanyBean.create} > > actionName = view-company > > > > I was expecting one of these value to be the <to-view-id> > > /secure/company/view.jsp?companyID=#{quickNewCompanyBean.companyID} > > > > > > Im no JSF expert and feel completly out of my depth here. > > > > > > Cheers > > Peter Henderson > > > > > > -----BEGIN PGP SIGNATURE----- > > Version: GnuPG v1.4.2.2 (GNU/Linux) > > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > > > iD8DBQFEhc8HaeMEhGmZg50RAuBVAJ90lVNe5QjNRjOiHw3cAs6a1o2SnACeKgtx > > u8IAWTxZ4JVD/2HjvvtRdtA= > > =gxLN > > -----END PGP SIGNATURE----- > > >
-- Matthias Wessendorf Aechterhoek 18 48282 Emsdetten blog: http://jroller.com/page/mwessendorf mail: mwessendorf-at-gmail-dot-com

