Thanks for the feedback Dale. A couple of thoughts below. On Wed, 2013-05-29 at 08:18 -0400, Dale Newfield wrote:
> I would have a setter on my action class that takes an array of ids. Then > the action does the appropriate lookups, and sets the hydrated objects on the > appropriate models. That's an alternative, yes. I do tend to prefer having the model objects in my actions though, to keep the number of objects to a minimum - it makes more sense to have a List<SomeObject> objects than an Integer[] ids, but maybe that's personal preference. > You do recognize that the data you provided is ambiguous, though, right? > Nothing you stated is sufficient to know *which* entity2 objects should be > set on entity, just which entity3 objects you want those entity2 objects to > have. In fact, if you don't happen to get a number of entity3 ids that > matches the number of entity2s on entity, you've left yourself no way of > knowing how to proceed. (Remember, all you get is a (potentially unordered) > list of ids from the form submission, not tuples.) I'm not sure where the ambiguity is. Take the following request parameters: entity.entity2List[0].entity3.id=10 entity.entity2List[1].entity3.id=20 There is no ambiguity in how the Object should be populated - one entity, which has two Entity2 on the entity2List object: the first entity2 has an Entity3.id=10 and the second Entity2 has an Entity3.id=20. In fact, this request works as expected (as evidenced by the test case [1]). The challenge is to create an s:select that generates that request parameters! Miguel [1] Unit Test snippet request.setParameter("entity.entity2List[0].entity3.id", "2"); request.setParameter("entity.entity2List[1].entity3.id", "11"); createAction("/example/Conversion.action"); executeProxy(); Entity entity = ((TypeConversionAction) action).getEntity(); assertNotNull(entity); assertNotNull(entity.getEntity2List()); assertEquals(2, entity.getEntity2List().size()); assertEquals(2, entity.getEntity2List().get(0).getEntity3().getId()); assertEquals(11, entity.getEntity2List().get(1).getEntity3().getId()); > > -Dale > > On May 29, 2013, at 6:27 AM, Miguel Almeida <mig...@almeida.at> wrote: > > > Dear all, > > > > Imagine you have the following scenario: > > - a property in your action: private Entity entity; > > > > - Entity has a List<Entity2> entity2List > > - Entity2 has a Entity3 entity3 > > > > Now, you need an s:select with multiple="true" to populate entity3. This > > corresponds to having a request in the form > > entity.entity2List[n].entity3.id (n=0,1,2...depending on how many items > > are selected). > > > > Question: how should the name parameter of the s:select be like to > > achieve this? > > > > Me and Lukasz have tried the following without success (meaning > > entity.entity2List has is empty): > > <s:select key="centre.choose" multiple="true" > > name="%{entity.entity2List[].entity3.id}" list="#someList" listKey="id" > > listValue="code"/> > > <s:select key="centre.choose" multiple="true" > > name="entity.entity2List[].entity3.id" list="#someList" listKey="id" > > listValue="code"/> > > > > > > Thank you for your help! > > > > Miguel Almeida > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org >