Sorry, should have read the whole thread - I missed the fact you don't have control of FooBar.
You're probably right, session scope is probably the easiest, although you could do this by creating a FooBarWrapper using the WrapDynaBean (needs BeanUtils 1.7.0 to use the getInstance() method). The following class should work: a) create warpper for existing FooBar FooBarWrapper wrapper = new FooBarWrapper(fooBar); b) Retrieve FooBar from populated wrapper and clean up FooBar fooBar = (FooBar)wrapper.getInstance();: wrapper.clear(); import java.util.List; import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; import org.apache.commons.beanutils.WrapDynaBean; public class FooBarWrapper extends WrapDynaBean { private List wrapperList = new ArrayList(); public FooBarWrapper() { super(new FooBar()); } public FooBarWrapper(FooBar fooBar) { super(fooBar); Collection fooBars = fooBar.getFooBars(); if (fooBars != null) { Iterator iterator = fooBars.iterator(); while (iterator.hasNext()) { wrapperList.add(new FooBarWrapper((FooBar)iterator.next())); } } } public Object get(String name) { if ("fooBars".equals(name)) { return wrapperList; } return super.get(name); } public Object get(String name, int index) { if ("fooBars".equals(name)) { if (wrapperList.size() <= index) { while (wrapperList.size() <= index) { FooBarWrapper childWrapper = new FooBarWrapper(); wrapperList.add(childWrapper); FooBar childFooBar = (FooBar)childWrapper.getInstance(); FooBar fooBar = (FooBar)getInstance(); if (fooBar.getFooBars() == null) { fooBar.setFooBars(new ArrayList()); } fooBar.getFooBars().add(childFooBar); } } return wrapperList.get(index); } return super.get(name, index); } public void clear() { for (int i = 0; i < wrapperList.size(); i++) { FooBarWrapper wrapper = (FooBarWrapper)wrapperList.get(i); wrapper.clear(); } instance = null; wrapperList.clear(); wrapperList = null; } public String toString() { return getInstance().toString(); } } ----- Original Message ----- From: "Rick Reumann" <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Thursday, September 16, 2004 5:45 AM Subject: Re: Think I'm stuck with using Session scope for this..unless a better idea? > Niall Pemberton wrote the following on 9/16/2004 12:41 AM: > > > "I don't see how this is going to work though. The problem is I'm getting > > back an Object (the FooBar one) from the back end that has the nested > > collections inside. This isn't a Struts object (not of type ActionForm)." > > I guess what meant was the object I'm dealing with is "handed" to me. > It's not an object that I have that much control of since it's coming > from the business layer (not coded by me) so not sure I can say "start > implmenting lazyList stuff in there. > > > > > Hadn't really been following this thread, but isn't the trick to getting > > round the BeanUtils issue all in the getFooBar(index) method. I don't use > > LazyList, but if it was an array - wouldn't something like the following > > work > > > > private FooBar[] fooBars; > > > > public FooBar getFooBar(int index) { > > The problem is there are not getXXX(int index) methods in the business > objects. The initial post mentions I'm stuffing one object into my form: > > class MyForm extends ActionForm { > private FooBarValueObject fooBar; > //get/set fooBar > } > > FooBarValueObject has a few properties but the main one of interest being: > Collection fooBars; > > Which end up being Collections of other FooBarValueObjects. > > It's not a big deal. I'm just going to use Session scope. If performance > becomes an issue I'll work on some listner thing that Michael talked > about that cleans it up. (I've actually yet run into a case where > keepign stuff in a User's Session caused serious memory problems... then > again I'm not working on Amazon.com or anything:) > > > > > if (fooBars == null) { > > fooBars = new FooBar[index]; > > } > > > > if (fooBars.length <= index) { > > FooBar[] newFooBars = new FooBar[index + 1]; > > System.arraycopy(foobars, 0, newFooBars, 0, fooBars.length); > > fooBars = newFooBars; > > } > > > > if (fooBars[index] == null) { > > fooBars[index] = new FooBar(); > > } > > > > return fooBars[index]; > > > > } > > -- > Rick > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]