Struts2, как связать Set <Object>из представления обратно в контроллер - PullRequest
0 голосов
/ 25 сентября 2019

Допустим, мой контроллер выглядит следующим образом:

public class myController {

    private MyCustomItem acte;

    ...
    // getter and setter
}

и класс MyCustomItem имеют набор другого класса, как этот

public class MyCustomItem {

    private Set<AnotherClass> signataires;

    ...
    // getter and setter
}

Наконец, AnotherClassУ элемента есть некоторые строковые атрибуты.

В представлении, связанном с моим контроллером, я хочу установить эти строковые атрибуты при отправке формы, поэтому я написал view.jsp следующим образом:

<!-- some html before -->
<s:form namespace="/my/namespace" action="MyController_execute">
<s:iterator value="acte.signataires" status="signaStatus">
    <s:hidden name="id" value="%{id}" />
    <s:property value="collectivite.nom"/>
    <s:textfield name="acte.signataires(%{#signaStatus.index}).commentaire" cssStyle="width:250px;"/>
</s:iterator>
<s:submit/>
</s:form>

После того, как я отправил форму, в моем контроллере, если я попытаюсь получить некоторые значения из моего Set <> acte.signataires, они будут нулевыми:

for (AnotherClass signataire : acte.getSignataires()) {
    System.out.println(signataire.getCommentaire()); // this print NULL
}

какая-нибудь помощь в этом?Является ли мой JSP сопоставления плохо?Я также попробовал очень простой синтаксис, такой как <s:textfield name="commentaire" cssStyle="width:250px;"/>, но он также не будет работать

1 Ответ

0 голосов
/ 26 сентября 2019

Вам нужны подписи собственности, чтобы быть Set?Я предлагаю вам использовать ArrayList, чтобы вы могли получить доступ к каждому элементу по индексу (сигнатуры [0], сигнатуры [1] и т. Д.).Используя ArrayList, вы можете сделать это следующим образом:

<s:form namespace="/my/namespace" action="MyController_execute">
<s:iterator value="acte.signataires" status="signaStatus">
    <s:hidden name="id" value="%{id}" />
    <s:property value="collectivite.nom"/>
    <INPUT type="text" name="acte.signataires[<s:property value="%{#signaStatus.index}"/>].commentaire" cssStyle="width:250px;"/>
</s:iterator>
<s:submit/>
</s:form>
...