如何从 TextField 标记更新 struts 2 列表

How to update struts 2 List from a TextField Tag

我想让我的 collection a List < Pair < Integer, String>> 从相应的 JSP 更新,其中包含生成 < s:TextFiedl >.

列表的迭代器

这是我所做的,但列表为空或包含空值。

行动:

public class ManageRegleArithmetiqueAction extends ActionSupport implements Preparable, JspDataPovider {
    private List<Pair<Integer, String>> propositionNumLabelList = new ArrayList<Pair<Integer,String>>();

    public void setPropositionNumLabelList(List<Pair<Integer, String>> propositionNumLabelList) {
    this.propositionNumLabelList = propositionNumLabelList;
    }

    public List<Pair<Integer, String>> getPropositionNumLabelList() {
        return propositionNumLabelList;
    }

}

JSP :

<s:iterator value="propositionNumLabelList" var="pair" status="status">
    <tr>
    <td CLASS="IHMText">
    <s:textfield key="propositionNumLabelList[%{#status.index}].cle" id="%{'propositionNum_' + #status.index}" />
    </td>
    <td CLASS="IHMText">
    <s:textfield key="propositionNumLabelList[%{#status.index}].valeur" id="%{'propositionLabel_' + #status.index}" />
    </td>
    </tr>
</s:iterator>

一对Class:

public class Pair<S, T> implements Serializable {


public Pair(S cle, T valeur) {
    super();
    this.cle = cle;
    this.valeur = valeur;
}


private static final long serialVersionUID = 7231580297094672707L;

private S cle;

private T valeur;

public S getCle() {
    return cle;
}

public void setCle(S cle) {
    this.cle = cle;
}

public T getValeur() {
    return valeur;
}

public void setValeur(T valeur) {
    this.valeur = valeur;
}

public static <S, T> Pair<S, T> ofKeyAndValue(S cle, T valeur) {
    return new Pair<S, T>(cle, valeur);
}
}

您应该将默认构造函数添加到 Pair class。没有它,Struts 无法在填充操作属性时实例化 bean。如果 Struts 知道如何实例化此 属性 已定义的 class,则它可以填充 属性 操作。如果您需要设置嵌套属性,也是如此。 Struts 默认实例化一个 class 如果 属性 在设置它的值之前没有被初始化。

public Pair() {
}