不使用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?)
中似乎没有好办法非常感谢所有帮助!如果您需要更多上下文,请告诉我,我可以提供一些。
答案 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了?!