"Or do you really need to pass through an action bean?"

I implemented this a while back, here it is..  questions or comments are 
welcome.


public class BaseActionBean<ActionBeanContext extends BaseActionBeanContext>
                implements ActionBean, ValidationErrorHandler {

        public void setContext(net.sourceforge.stripes.action.ActionBeanContext 
actionBeanContext) {
                @SuppressWarnings("unchecked")
                ActionBeanContext context = (ActionBeanContext) 
actionBeanContext;
                this.context = context;
                if (getContext().getBreadCrumbTrailSize() > 0)  {       // if 
subclass wants bread crumb trail
                        getContext().addBreadCrumb();                           
// we'll keep it for them.
                }
        }
}


public class BaseActionBeanContext extends ActionBeanContext {


        /**
         * Recipe for breadcrumbs. Uses a linked list with a size limited by
         * subclass to store the previous http requests written as a GET 
string. The add
         * method is called in set context.
         */
        public void addBreadCrumb() {
                Class<? extends ActionBean> actionBeanType = 
getRequestedActionBeanType();
                if (actionBeanType == null
                                || ! 
actionBeanType.isAnnotationPresent(SkipBreadCrumb.class)) {
                        
addBreadCrumb(urlUtil.postParamsToGetString(getRequest(), false));
                }
        }


        public LinkedList<String> getBreadCrumbs() {
                LinkedList<String> breadCrumbs = 
getSesAttr(AttrNames.SES_BREAD_CRUMBS);
                if (breadCrumbs == null)  {
                        breadCrumbs = new LinkedList<String>();
                        setBreadCrumbs(breadCrumbs);
                }
                return breadCrumbs;
        }


        private void addBreadCrumb(String breadCrumb)  {
                LinkedList<String> breadCrumbs = getBreadCrumbs();
                if (breadCrumbs.size() >= getBreadCrumbTrailSize())  {
                        breadCrumbs.remove();
                        addBreadCrumb(breadCrumb);
                        return;
                }
                breadCrumbs.add(breadCrumb);
        }


        private void setBreadCrumbs(LinkedList<String> breadCrumbs)  {
                setSesAttr(AttrNames.SES_BREAD_CRUMBS, breadCrumbs);
        }


        /**
         * Off by default, override & increase size to the desired number to 
enable.
         */
        protected int getBreadCrumbTrailSize()  {
                return 0;
        }
}


public class UrlUtil {

        private static Set<String> paramsToOmit;
        static  {
                paramsToOmit = new HashSet<String>();
                paramsToOmit.add(StripesConstants.URL_KEY_FLASH_SCOPE_ID);
        }


        public String postParamsToGetString(HttpServletRequest request, boolean 
encode) {
                StringBuffer sb = new StringBuffer();
                sb.append(request.getServletPath());
                @SuppressWarnings("unchecked")
                Map<String, String[]> params = request.getParameterMap();
                if (params != null && !params.isEmpty()) {
                        sb.append('?').append(paramMapToQueryString(params));
                }
                return encode ? encode(sb.toString()) : sb.toString();
        }


        private StringBuffer paramMapToQueryString(Map<String, String[]> 
params) {
                StringBuffer sb = new StringBuffer();
                for (Entry<String, String[]> entry : params.entrySet()) {
                        String key = entry.getKey();
                        if (paramsToOmit.contains(key))  {
                                continue;
                        }
                        String[] value = entry.getValue();
                        for (String aValue : value) {
                                if ( ! "".equals(aValue))  {
                                        
sb.append(key).append('=').append(aValue).append('&');
                                }
                        }
                }
                if (sb.length() > 0)  {
                        sb.setLength(sb.length() - 1);
                }
                return sb;
        }


        public String encode(String plainText) {
                try {
                        return URLEncoder.encode(plainText, "UTF-8");
                } catch (UnsupportedEncodingException e) {
                        throw new IllegalArgumentException(e);
                }
        }
}


/**
 * Used to tag certain actions that shouldn't show up
 * in the bread crumb trail (login/logout, etc)
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SkipBreadCrumb {

}

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Poitras Christian
Sent: Tuesday, April 29, 2008 9:18 AM
To: 'Stripes Users List'
Subject: Re: [Stripes-users] history.back() using stripes

Can you use javascript?
Or do you really need to pass through an action bean?

Christian


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of SivaKumarl
Sent: Saturday, April 26, 2008 2:05 AM
To: stripes-users@lists.sourceforge.net
Subject: [Stripes-users] history.back() using stripes


Hi Friends,
          Please tell how to implement  history.back() functionality in stripes.

Thanks,
Siva

--
View this message in context: 
http://www.nabble.com/history.back%28%29-using-stripes-tp16909748p16909748.html
Sent from the stripes-users mailing list archive at Nabble.com.


-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss 
this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to