Заполнить список <String>в стойках2 из данных формы - PullRequest
5 голосов
/ 29 апреля 2011

Я чувствую, что это должно быть чрезвычайно очевидно, но пока мне не удалось найти ответ.

Я хочу получить список строк (или массив строк, мне действительно все равно) заполняются данными формы в Struts2.

Я видел несколько примеров того, как сделать индексированные свойства с bean-компонентами , но упаковка одной строки внутри объекта кажется довольно глупой.

Итак, у меня есть что-то вроде

    public class Controller extends ActionSupport {

        private List<String> strings = new ArrayList<String>();
        public Controller() {
            strings.add("1");
            strings.add("2");
            strings.add("3");
            strings.add("4");
            strings.add("5");
        }
        public String execute() throws Exception {
            return ActionSupport.SUCCESS;
        }
        public List<String> getStrings() {
            return strings;
        }

        public void setStrings(List<String> s) {
            strings = s;
        }
    }    

...

<s:iterator value="strings" status="stringStatus">
   <s:textfield name="strings[%{#stringStatus.index}]" style="width: 5em" />
</s:iterator>

Поля формы заполняются их начальными значениями (например, 1, 2 и т. Д.), Норезультаты должным образом не отправлены обратно.setStrings никогда не вызывается, но значения устанавливаются в пустые строки.

Кто-нибудь знает, что происходит?Заранее спасибо!

1 Ответ

7 голосов
/ 29 апреля 2011

Я полагаю, что при наличии вашего кода jsp будет выглядеть примерно так:

<input type="text" name="strings[0]" style="width: 5em" value="1"/>
<input type="text" name="strings[1]" style="width: 5em" value="2"/>
<input type="text" name="strings[2]" style="width: 5em" value="3"/>
...

Обратите внимание, что в качестве имени поля используются ссылки "strings [x]", где вам нужно, чтобы имя былопросто "струны".Я хотел бы предложить что-то вроде:

<s:iterator value="strings" status="stringStatus">
   <s:textfield name="strings" value="%{[0].toString()}" style="width: 5em" />
</s:iterator>

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

...