Основная проблема, которую вам нужно решить, - это получить индексированный список параметров запроса в вашем классе действий. Это довольно просто, и я думаю, что вы на правильном пути, начав с создания List
s входных параметров. Я нашел немного документации по теме здесь . В основном вы можете иметь поля формы с именами, такими как jobTitles[0]
, jobTitles[1]
, которые будут использоваться для заполнения списка jobTitles
.
Тем не менее, я думаю, что понятие «принадлежность» заслуживает отдельного класса:
class UserAffiliation {
private String title;
private String schoolId;
private String institutionId;
private String departmentId;
private String divisionId;
// Make sure that there is a no-args constructor (default or explicit) for Struts to create instances.
// Add getters and setters
}
В вашем классе действий:
private List<UserAffiliation> affiliations;
...
// getter and setter for affiliations
Было бы достаточно для захвата ввода пользователя.
Ваш JSP может выглядеть примерно так:
<form action=".." method="post">
<div class="affiliation">
<s:textfield name="affiliations[0].title"/>
<s:select name="affiliations[0].schoolId" list="schools" listKey="schoolId" listValue="schoolName"/>
...
</div>
<s:if test="affiliations != null && affiliations.size > 1">
<s:iterator value="affiliations" begin="1" status="status">
<s:textfield name="affiliations[%{#status.index + 1}].title"/>
<s:select name="affiliations[%{#status.index + 1}].schoolId" list="schools" listKey="schoolId" listValue="schoolName"/>
...
</s:iterator>
</s:if>
....
</form>
<div id="affilationTemplate" style="display:none;">
<div class="affiliation">
<s:textfield name="affiliations[__IDX__].title"/>
<s:select name="affiliations[__IDX__].schoolId" list="schools" listKey="schoolId" listValue="schoolName"/>
</div>
...
</div>
Обратите внимание на div affilationTemplate
. Вы можете использовать JS, чтобы получить HTML-код этого шаблона, заменить __IDX__
на соответствующий индекс и добавить к содержимому формы, когда пользователь нажимает кнопку «добавить еще одну принадлежность». Это гарантирует, что вновь добавленные поля выбора предварительно заполнены соответствующими значениями.
В блоке итератора отображаются значения, которые пользователь уже отправил (за исключением «первичной принадлежности», которая уже отображается над ним).
ПРИМЕЧАНИЕ: Вы, конечно, должны попытаться избавиться от повторяющихся элементов формы, если это возможно. Я бы попробовал извлечь их из списка включенных.