我在Struts2中遇到问题,在我的示例应用程序中我有对象数组(说出人名),我需要将这些名称显示为可编辑的文本字段,我使用迭代器为此,我成功地进行了调整,但是当我能够提供相同的价值并提交表格时。我得到的整个数组都保存了空值。
在我的表单bean中说Exaple我有一个属性 姓名[]姓名;
在我的JSP中,我将迭代器作为
如果有3个名字,那么我可以在UI上获取这些名称,如果我可以用一些虚拟值初始化它们,但是当我编辑和汇总时,那么“名字”数组没有得到更新。请帮助我这方面
答案 0 :(得分:4)
在Struts2中,当您需要重新填充bean项列表时,需要通过索引来引用它们。请参考以下示例:
Bean类:
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
动作类:
public class PersonAction extends ActionSupport {
private List<Person> persons;
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
//Initial Load method
@Override
public String execute() {
persons = new ArrayList<Person>();
int alpha = 65;
for(int i = 0; i < 3 ; i++) {
Person person = new Person();
person.setId(i);
person.setName(String.valueOf((char)alpha++));
persons.add(person);
}
return SUCCESS;
}
//Function that handles the form submit
public String updatePerson() {
for(Person person : persons) {
System.out.println(person.getId() + ":" + person.getName());
}
return SUCCESS;
}
}
页:
<s:form action="doUpdate">
<s:iterator value="persons" status="stat" var="person">
<s:textfield value="%{#person.name}" name="persons[%{#stat.count}].name"/><br/>
</s:iterator>
<s:submit value="Submit"/>
</s:form>
当您提交上述表单时,网址将显示为doUpdate?persons[0].name=A1&persons[1].name=B1&persons[2].name=C1
。同样,如果您需要更新第一个人对象的ID,您将使用表单将persons[0].id=3
附加到网址。在<s:textfield value="%{#person.name}" name="persons[%{#stat.count}].name"/>
中,您可以告诉每个对象预定义值是人名。 name
属性用于设置渲染的html输入元素;提交表单时将在URL中引用的名称。如果你查看生成的html,你会明白的想法。
答案 1 :(得分:0)
使用struts2的iterator标签,如果list不为空,则使用:
<s:iterator value="names" status="namesStatus">
<s:property/><br/>
</s:iterator>