如何从TextField标记更新struts 2 List

时间:2017-03-21 15:33:01

标签: java jsp struts2 iterator

我希望从包含生成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>

配对类:

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);
}
}

1 个答案:

答案 0 :(得分:1)

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

public Pair() {
}