Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > struts2. Сохранение массивов данных из формы


Автор: startpoint 31.8.2012, 13:30
В браузере пользователя javascript'ом (ExtJS) рисуется форма. Заранее неизвестно сколько полей(подразделов) будет в этой форме. Каждый подраздел описывает какую то сущность, у котрой имеется, допустим, два свойства - name и lastName. Представим, что это выглядит так:
Код

<form name="persons" action="/persons.action" method="post">
    <input type="text" name="persons[0].lastName" value="aaa" />
    <input type="text" name="persons[0].name" value="bbb" />
    <input type="text" name="persons[1].lastName" value="xxx" />
    <input type="text" name="persons[1].name" value="zzz" />
</form>

Так вот, товарищи, как это получить хоть в каком нибудь виде (бины, хэш-мэпы...) на серверной стороне. Использую struts версии 2.3.4.1. Я перепробовал всё уже и убил на это целый долбаный день если не больше и кучу нервов. Лично у меня, все эти советы не работают:
http://struts.apache.org/2.3.4.1/docs/type-conversion.html
http://stackoverflow.com/questions/7889623/update-a-list-of-value-in-textfield-in-struts2
http://stackoverflow.com/questions/1090125/struts2-reading-an-array-of-input-into-an-action
http://stackoverflow.com/questions/6313790/post-an-array-of-custom-objects-to-a-struts-2-action
http://stackoverflow.com/questions/5834944/populate-liststring-in-struts2-from-form-data и ещё целая куча... Либо сеттеры на action-классе не вызываются, либо вызываются не те, которые ожидаешь, но и в любом случае приходит только null и какие то эксепшены. Я не хочу приводить никакого кода т.к. его написано и затёрто уже куча. Просто, если у кого то есть работающий пример - скинтье плиз сюда. Буду примного благодарен.

Автор: Матильда 7.9.2012, 10:01
startpoint, если я правильно поняла проблему, попробуй так:

Код

        <logic:iterate id="row" name="..." property="persons" indexId="index">
            <tr>                
                <td><bean:text name="..." property='<%="persons[" + index + "].lastName"%>' styleClass="text"/></td>
                <td><html:text name="..." property='<%="persons[" + index + "].name"%>' styleClass="text"/></td>
            </tr>
        </logic:iterate>


В экшене в цикле:
Код

...
Person person = new Person();
person.setLastName(persons[i].getLastName());
person.setName(persons[i].getName());
...


Возможно существуют более оптимальные решения, но мне в свое вемя нужно было сделать быстро и ничего лучше я не придумала.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)