Hi,

We have done a similiar thing, there is a custom navigation handler which manages the navigation in our application. There are special action names and for the back operation the name is "@back@", the navigation handler also uses a navigation data holder, which tracks the pages visited using a stack. When a return action named @back@ is realized, the last view stored is popped from stack and navigation occurs afterwards.

regards,

Cagatay Civici

On 1/6/06, Yee CN <[EMAIL PROTECTED]> wrote:

Hi,

 

I am thinking of providing a 'back' button on all my pages. Below is a sketch on how I intended to do it, but before embarking on it I would like to know whether anybody has done similar and to hear from you Gurus whether my approach is workable.

 

1) I have a stack<backingBean, nagivgationResult> to store the pages being visited and the associated backing bean.

    The stack will be limited to store (say) the last 10 pages visited, so it won't grow continuously. I think a circular list could probably be used for this.

 

2) A phase listener will push the current page's backing bean and navigation to the stack; it will happen at the AFTER RENDER_RESPONSE phase.

 

3) The 'back' button will pop the stack – restores the backing bean and navigates back to the page concerned.

 

4) Some pages can be marked to not to participate in this scheme.

 

I am assuming a) the beans are in request scope, b) there is only one backing bean per page.

For session scope beans I would have to serialize the bean.

 

Please – any comments?

 

Best regards,

Yee

 

 

 

// getting an restoring a manage bean

public static Object getManagedBean(String beanName) {

            Object o = getValueBinding( "#{" + beanName + "}" ).getValue(FacesContext.getCurrentInstance());

            return o;

           

public static void setManageBean(String beanName, Object bean) {

            getValueBinding( "#{" + beanName + "}" ).setValue(FacesContext.getCurrentInstance(), bean);

}

 

// some helper methods

private static Application getApplication() {

            ApplicationFactory appFactory = (ApplicationFactory)FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);

            return appFactory.getApplication();

}

           

private static ValueBinding getValueBinding(String el) {

            return getApplication().createValueBinding(el);

}

           

private static Object getElValue(String el) {

            return getValueBinding(el).getValue(FacesContext.getCurrentInstance());

}

           

 


Reply via email to