[jboss-user] [JBoss Seam] - Re: How are you handling login / registration redirects?

christian.bauer@jboss.com do-not-reply at jboss.com
Fri Jan 26 16:12:41 EST 2007

I use this (for similar functionality), which is better because it is conversation scoped (app works in several windows):

On every page I can get "back" to, I store it in a conversation scoped component with a page action in pages.xml:

  |     <page view-id="/docDisplay.xhtml" action="#{documentBrowser.prepare()}">

  | @Name("documentBrowser")
  | public class DocumentBrowser {
  |     @In
  |     protected org.jboss.seam.core.Redirect redirect;
  |     public String prepare() {
  |                 // Store the view-id that called this method (as a page action) for return (exit of a later conversation)
  |                 redirect.captureCurrentRequest();
  |     }
  |     /**
  |      * Executes a redirect to the last view-id that was prepare()ed.
  |      * <p>
  |      * Usually called after ending a conversation. Assumes that the caller of the method does not want to propagate
  |      * the current (ended) conversation across that redirect. Also removes any stored <tt>actionOutcome</tt>,
  |      * <tt>actionMethod</tt> or <tt>cid</tt> request parameter before redirecting, we don't want to redirect to
  |      * a prepare()ed page that was in a long-running conversation (temporary doesn't matter) or that was last
  |      * called with an action (that action would probably send us straight back into the conversation we are trying
  |      * to redirect out of).
  |      */
  |     public void redirectToLastBrowsedPage() {
  |         // We don't want to redirect to an action, so if the last browsed page was called with an action, remove it
  |         redirect.getParameters().remove("actionOutcome");
  |         redirect.getParameters().remove("actionMethod");
  |         // If the last browsed page had a conversation identifier (we assume of a temporary conversation), remove it
  |         redirect.getParameters().remove("cid");
  |         // We also don't want to redirect the long-running conversation, the caller has ended it already
  |         redirect.setConversationPropagationEnabled(false);
  |         redirect.execute();
  |     }
  | }

And I can then later exit a conversation like this and redirect to the last "prepared" page:

  |     <s:button id="exit" value="Exit Editor" styleClass="button" action="#{documentBrowser.redirectToLastBrowsedPage()}"
  |               propagation="end"/>

There is some more details to this overall navigation strategy, but that should get you started.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4007023#4007023

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4007023

More information about the jboss-user mailing list