В Struts2, когда вам нужно заполнить список элементов бобов, вы должны ссылаться на них через индексы. Пожалуйста, обратитесь к примеру ниже:
Класс бобов:
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>
Когда вы отправляете вышеуказанную форму, URL будет выглядеть как doUpdate?persons[0].name=A1&persons[1].name=B1&persons[2].name=C1
. Аналогичным образом, если вам нужно обновить идентификатор объекта от первого лица, вы добавите persons[0].id=3
к URL-адресу, используя форму. В <s:textfield value="%{#person.name}" name="persons[%{#stat.count}].name"/>
вы говорите, что предопределенным значением является имя человека для каждого объекта. Атрибут name
предназначен для установки визуализированного элемента ввода html; имя, на которое будет указана ссылка при отправке формы. Вы получите ясное представление, если вы посмотрите на сгенерированный HTML.