什么是在struts中进行多行更新的好方法(使用struts实时)?

时间:2009-04-27 06:12:01

标签: struts pojo multirow

不使用DynaForm而且是亲属。

我想使用POJO数据传输对象,例如Person:

public class Person {
   private Long id;
   private String firstName;
   private String lastName;
   // ... getters / setters for the fields
}

在struts实时动作表格中我们会:

public class PersonUpdateForm extends SLActionForm {
   String organization;
   Person[] persons; // all the people will be changed to this organization; they're names and so forth can be updated at the same time (stupid, but a client might desire this)

   // getters / setters + index setters / getters for persons

}

相应的html:text标签在JSP中的含义是什么?如果我切换到List person字段并使用延迟加载列表(在commons-collections中),那会如何改变thinsg?

在struts-1.2(.9?)

中似乎没有好办法

非常感谢所有帮助!如果您需要更多上下文,请告诉我,我可以提供一些。

1 个答案:

答案 0 :(得分:1)

好的,我相信我已经明白了!诀窍是每次通过BeanUtils的populate方法调用getPersons()方法时,让索引的getter创建一个元素。代码已经完成,但我得到了积极的结果。现在是凌晨3点30分,我已经被困住了一段时间。似乎没有人知道答案,这让我想用鳟鱼把它们砸在头上。至于我自己的无知......我只能责怪他们!

public List<Person> getPersons() {
   persons.add(new Person()); // BeanUtils needs to know the list is large enough
   return persons;
}

当然,也可以添加索引的getter和setter。

我记得我是怎么做到的。您必须将上面的人员列表预先初始化为您希望转移的最大尺寸。这是因为List首先转换为数组,然后在数组的每个元素上设置属性,最后使用setPersons(...)设置List。因此,使用延迟加载List实现或类似方法(如上面所示)将不适用于struts live。以下是您需要做的更详细的内容:

private List<Person> persons = new ArrayList<Person>(MAX_PEOPLE);
public MyConstructor() { for(int i = 0; i < MAX_PEOPLE; i++) persons.add(new Person()); }

public List<Person> getPeopleSubmitted() {
    List<Person> copy = new ArrayList<Person>();
    for(Person p : persons) {
        if(p.getId() != null) copy.add(p); 
        // id will be set for the submitted elements;
        // the others will have a null id
    }
    return copy; // only the submitted persons returned - not the blank templates
}

这基本上就是你要做的!但真正的问题是 - 谁在使用struts了?!