обновить список значений в текстовом поле в struts2 - PullRequest
1 голос
/ 25 октября 2011

Я столкнулся с проблемой в Struts2. В моем примере приложения у меня есть массив объектов (скажите имя человека), мне нужно отображать эти имена в виде редактируемых текстовых полей, для этого я использую итераторы, я успешно набираю, Но когда я могу изменить то же значение и отправить форму.Я получаю весь массив, который содержит нулевое значение.

Скажите для Exaple в моем компоненте формы. У меня есть свойство Name [] names;

В моем JSP итератор имеет вид

Если есть 3 имени, тогда я могу получить эти имена в пользовательском интерфейсе, если я могу инициализировать их с каким-то фиктивным значением, но когда я редактирую и присваиваю значения, массив «names» не обновляется.Пожалуйста, помогите мне в этом отношении

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

В 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.

0 голосов
/ 21 октября 2013

Используйте тег итератора struts2, если список не пустой, используйте:

<s:iterator value="names" status="namesStatus">
    <s:property/><br/>
</s:iterator>
...