Bhoomtawath Plinsut
Bhoomtawath Plinsut

Reputation: 1370

Preserving objects through actions in Struts2

Can I preserve object across actions in Struts2 without using session?

I'm working on a Struts2 project and curious if there are some ways to preserving object value once an action is ended.

What I'm trying to do is:

  1. Calling an action to read from an uploaded file and prepare its contents as a list of objects.
  2. Then I display the list as an example for the user.
  3. Then the user can click on a submit button to call an action to process the list which is created from the first action.

Usually the list would be lost once the action is end. So, I have to store the list as a session, but I think it should have some better methods to achieve the I'm working on.

Upvotes: 1

Views: 1790

Answers (2)

Andrea Ligios
Andrea Ligios

Reputation: 50203

If you need to preserve the List, then you have to use the Session.

But if you (if I've understood your problem) just need to handle the List through

ActionOne (that creates the List) ->

JSPOne (thast shows the List to the user) ->

ACtionTwo (that receives the List from JSPOne and does some business with it)

, without having to worry about the fact that the user can change the List client-side (for example manipulating the web page with FireBug), then you don't need the session.

You just need the List object to be declared on ActionOne and ActionTwo (with getters and setters, at least the getter on ActionOne and at least the setter on ActionTwo), and to include List name and index on name attribute of JSP tags. If you just draw it (like with <s:property/> tag), instad of using some tag that will post the value, like <s:textfield />, then just use an <s:hidden /> to post te value.

For example, if you have:

List<MyObject> myList //with getters and setters

and assuming that MyObject has id and value fields (with getters and setters),

in JSP instead of

<s:iterator value="myList" >
   <s:property value="id"/>
   <s:textfield name="value"/>
</s:iterator>

use

<s:iterator value="myList" status="ctr" >
   <s:hidden name="myList[#ctr.index].id" value="id"/>
   <s:property value="id"/> <!-- no need here, you won't post this -->
   <s:textfield name="myList[#ctr.index].value" value="value" />
</s:iterator>

You will eventually validate a List like this throught the Visitor Validator (somewhewre in the future after all the rest is done :)

Enjoy

Upvotes: 1

Dave Newton
Dave Newton

Reputation: 160191

If you want to preserve data across requests the session is the normal mechanism for doing so.

If you don't use the session you'd need to essentially duplicate its functionality to maintain the data associated with the current user/conversation.

Upvotes: 2

Related Questions