views:

1410

answers:

1

I'm trying to populate a List of beans from a form:

public class Foo {
   public String attr1;
   public String attr2;
}

public class Bar {
   public List<Foo> foos;
}

public class StrutsAction extends Action {
   public Bar bar;
}

So in my Struts2 form, what's the best way to populate Foo? Intuitively, I want to do:

<input type="hidden" name="bar.foos.attr1" />

but that isn't working and would cause collisions. I'm sure the answer is very simple and I'm overlooking it.

+3  A: 

If I understand it correctly, you just want different name for each hidden field?

<s:iterator value="bars" status="key">
    <input type="hidden" name="bar.foos[<s:property value="%{#key.index}" />].attr1" value="<s:property value="attr1"/>" />
    <input type="hidden" name="bar.foos[<s:property value="%{#key.index}" />].attr2" value="<s:property value="attr2"/>" />
</s:iterator>

which should gives you

<input type="hidden" name="bar.foos[0].attr1" value="some value" />
<input type="hidden" name="bar.foos[0].attr2" value="some other value" />
<input type="hidden" name="bar.foos[1].attr1" value="some value" />
<input type="hidden" name="bar.foos[1].attr2" value="some other value" />

If you have proper getter/setter, it should set all the values when the form is being submitted.

Roy Chan
You are correct sir. I suppose I simply didn't know the proper syntax (i.e. the [0]).
Droo