You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Hoang, Hai" <Ha...@coair.com> on 2002/09/20 22:18:05 UTC
RE: How to remove ActionForm with session scope from the session
obje ct
Vic,
This is exactly what I am talking about but is there any sample codes for
this "token" sharing algorithm where I can use?
Thanks,
Hai
-----Original Message-----
From: V. Cekvenich [mailto:vicc@users.sourceforge.net]
Sent: Friday, September 20, 2002 2:57 PM
To: struts-user@jakarta.apache.org
Subject: Re: How to remove ActionForm with session scope from the session
obje ct
http://www.mail-archive.com/mvc-programmers@basebeans.com/msg00124.html
Read part about 5th scope.
V.
Hoang, Hai wrote:
> I've a number of forms with session scope and I want to remove them from
the
> session object when I am no longer used them. The trick is how to find
out
> when they are no longer being used? For example, let say I've 10
> actionForms associated with 10 jsp page. If I am on page number 1
> therefore, page 9-10 is not being used and I can just loop through it a
> remove the corresponding actionForms from the session object. If I am
page
> number 2 then I loop through page 1 and 8-10 and so on. Is there a better
> way for me to do this? Thanks
>
> Hai Hoang
>
>
>
> _________________________________________________________________________
> Introducing the all new and improved continental.com. With a totally new
> personalized design, it's the best place to go. Before you go.
>
> Continental Airlines. Work Hard. Fly Right.
>
> http://www.continental.com
>
>
--
To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
For additional commands, e-mail:
<ma...@jakarta.apache.org>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>
Re: How to remove ActionForm with session scope from the session
obje ct
Posted by "V. Cekvenich" <vi...@users.sourceforge.net>.
Code at your request:
(by the way, thi comes in handy lon larger scale projects, it auto
cleans up sesion beans for your, so you can put more users per box).
V.
package com.rd;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.util.*;
/**
* TC@baseBeans.com
*
*
*/
public abstract class ScopedAction extends Action {
public static String TOKEN_KEY = ScopedAction.class.getName() + ".TOKEN";
public static String ATTRIBUTES_KEY = ScopedAction.class.getName() +
".ATTRIBUTES";
/**
*
*
*/
private void _init(ActionContext context) {
HashMap map = new HashMap();
context.setSessionAttribute(ATTRIBUTES_KEY, map);
init(context);
}
/**
*
*
*/
public abstract void init(ActionContext context);
/**
* Do any cleanup necessary within the session and application context.
* The destroy event happens when the action is loosing
* focus within the application. Is is possible for the action to gain
* control again, therefore, the destroy event may be called more than
* once during an application.
*
*/
public abstract void destroy( ActionMapping map, HttpServletRequest
req, HttpServletResponse res);
/**
*
*/
protected void _destroy( ActionMapping map, HttpServletRequest req,
HttpServletResponse res ) {
req.getSession().removeAttribute(ATTRIBUTES_KEY);
destroy( map, req, res );
}
/**
*
*
*
*/
public ActionForward execute( ActionMapping map, ActionForm form,
HttpServletRequest req, HttpServletResponse res) {
// create the context
ActionContext context = new ActionContext();
context.map = map;
context.form = form;
context.req = req;
context.res = res;
/**
* call init if this is the first time since the last destroy
*
*/
if (beginScope(context)) {
// tell the old action to destroy itself
ActionMapping oldScopeOwner =
(ActionMapping) context.getSessionAttribute(TOKEN_KEY);
if (oldScopeOwner != null) {
String actionClassName = oldScopeOwner.getType();
// we must instantiate the previous owner to invoke its destroy method
try {
Class actionClass = Class.forName(actionClassName);
Object subject = actionClass.newInstance();
if (subject instanceof ScopedAction) {
((ScopedAction) subject)._destroy(oldScopeOwner, req, res);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
// take ownership the action scoping token
context.setSessionAttribute(TOKEN_KEY, map);
_init(context);
}
execute(context);
return context.forward;
}
/**
*
*/
public abstract void execute(ActionContext context);
/**
* true if the current session is being handed off to this
* action. After the hand off, this action will own the "action
* scope", i.e., be the action considered as current.
*
*/
private boolean beginScope(ActionContext context) {
ActionMapping scopeOwner =
(ActionMapping) context.getSessionAttribute(TOKEN_KEY);
// if there is no previous owner, we are initializing
if ( scopeOwner == null )
return true;
String lastAction = scopeOwner.getPath();
String currentAction = context.map.getPath();
System.out.println(lastAction + " " + currentAction);
if (!currentAction.equals(lastAction))
return true;
else
return false;
}
}
ackage com.rd;
import java.util.*;
/**
*
*
*/
public class ActionContext {
public org.apache.struts.action.ActionMapping map;
public javax.servlet.http.HttpServletRequest req;
public javax.servlet.http.HttpServletResponse res;
public org.apache.struts.action.ActionForm form;
public org.apache.struts.action.ActionForward forward;
public Object getSessionAttribute(String key) {
return req.getSession(true).getAttribute(key);
}
public void setSessionAttribute(String key, Object value) {
req.getSession(true).setAttribute(key, value);
}
/**
*
*/
public void setAttribute(String key, Object value) {
HashMap hmap = (HashMap)req.getSession().getAttribute(
ScopedAction.ATTRIBUTES_KEY );
hmap.put(key,value);
}
/**
*
*/
public Object getAttribute(String key) {
HashMap hmap = (HashMap)req.getSession().getAttribute(
ScopedAction.ATTRIBUTES_KEY );
return hmap.get(key);
}
}
Hoang, Hai wrote:
> Vic,
>
> This is exactly what I am talking about but is there any sample codes for
> this "token" sharing algorithm where I can use?
>
> Thanks,
>
> Hai
>
> -----Original Message-----
> From: V. Cekvenich [mailto:vicc@users.sourceforge.net]
> Sent: Friday, September 20, 2002 2:57 PM
> To: struts-user@jakarta.apache.org
> Subject: Re: How to remove ActionForm with session scope from the session
> obje ct
>
> http://www.mail-archive.com/mvc-programmers@basebeans.com/msg00124.html
>
> Read part about 5th scope.
>
> V.
>
> Hoang, Hai wrote:
>
>>I've a number of forms with session scope and I want to remove them from
>
> the
>
>>session object when I am no longer used them. The trick is how to find
>
> out
>
>>when they are no longer being used? For example, let say I've 10
>>actionForms associated with 10 jsp page. If I am on page number 1
>>therefore, page 9-10 is not being used and I can just loop through it a
>>remove the corresponding actionForms from the session object. If I am
>
> page
>
>>number 2 then I loop through page 1 and 8-10 and so on. Is there a better
>>way for me to do this? Thanks
>>
>>Hai Hoang
>>
>>
>>
>>_________________________________________________________________________
>>Introducing the all new and improved continental.com. With a totally new
>>personalized design, it's the best place to go. Before you go.
>>
>>Continental Airlines. Work Hard. Fly Right.
>>
>>http://www.continental.com
>>
>>
>
>
>
>
>
> --
> To unsubscribe, e-mail:
> <ma...@jakarta.apache.org>
> For additional commands, e-mail:
> <ma...@jakarta.apache.org>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>