Struts загрузка нескольких файлов с помощью Dyna Action Forms (Struts 1) - PullRequest
0 голосов
/ 31 мая 2011

Мне нужно загрузить несколько файлов на одной странице. С формами DynaAction вы должны указать «имя» каждого из них. Мне нужно, чтобы это было динамичным. Я считаю, что могу использовать массив / список для получения группы файлов, но я не могу сопоставить файлы с чем-то конкретным.

Карта была бы идеальной, но я боюсь, что не могу понять "ключевую" часть карты.

Есть идеи?

1 Ответ

1 голос
/ 01 июня 2011

Итак, я исследовал и потратил 3 часа, пробуя разные вещи. По этому поводу в Интернете не хватает информации. Множество неотвеченных вопросов. Теперь, когда Struts 1 - закат, вероятно, больше не будет информации, поэтому я решил добавить гроб в гроб ...

Я обнаружил, что делаю это больше, чем нужно. С помощью этих двух страниц:

Построение контроллера

Свойства индекса

Я понял, что вы действительно хотите использовать карту для хранения объектов FormFile. Большая часть документации, которую я нашел, основывалась на объектах модели, но я использовал DynaForms. Итак, Struts-config.xml выглядит так:

<form-property name="theFiles" type="java.util.HashMap"/>

JSP выглядит так:

 <c:forEach items="${userForm.map.roleChanges}" var="changeMap" varStatus="status"> 
...
    <html:file property="theFile(${changeMap.key.roleName})"  styleId="theFile" />
...     
</c:forEach>

Секретный соус - это свойство: theFiles ($ {changeMap.key.roleName}). Поскольку theFiles - это карта, Struts нужен ключ, и вы используете приведенный выше синтаксис, чтобы получить его на карте. Java для получения карты выглядит следующим образом:

Map fileMap =  (Map)userForm.get("theFile");

Это карта объектов FormFile. Сладко, как может быть.

Я повесил трубку, потому что никогда раньше не использовал ArrayList / Map. Это довольно просто (как и должно быть. Кроме того, много говорят о параметре «index» в некоторых тегах Struts. Я некоторое время возился с ним, но не мог заставить его работать. Я думаю, потому что DynaForm. Не уверен ...

...