Struts 2: Aktualisieren einer Liste von Objekten aus einem Formular mit modellgesteuerter Architektur

Ich habe hier bereits mehrere Ansätze gesucht und gefunden, aber ich kann sie nicht für mein Projekt zum Laufen bringen.

Ich möchte eine Bearbeitungsseite für eine Liste von Objekten anzeigen, die alle auf einmal aktualisiert werden sollen. Ich verwende den Ansatz der modellgetriebenen Architektur, um dies zu erreichen, aber ich kann es nicht richtig zum Laufen bringen. Ich kann die Liste und ihre Werte immer anzeigen und durchlaufen, aber ich kann ihre Werte nicht ändern.

Also hier ist, was ich gerade mache:

Ich habe ein Modell 'Teilzeitgrad' in meiner Datenbank, das einige einfache Attribute mit Gettern und Setzern hat.

public class Teilzeitgrad {

    private Date datumAb;
    private Date datumBis;
    private double betrag;

    // ... getters and setters

}

In meiner Action-Klasse implementiere ich das ModelDriven Interface mit einer Liste von Teilzeitgrad-Objekten

public class DienstabschnittViewJahrAction implements ModelDriven<List<Teilzeitgrad>>, Preparable
{
    List<Teilzeitgrad> teilzeitgrads;
    private String tzgTypKey;
    private Integer jahrIndex;

    public String execute() {
        return SUCCESS;
    }

    public List<Teilzeitgrad> getModel()
    {
        if(teilzeitgrads == null) {
            teilzeitgrads = getTeilzeitgradListByTypAndJahr(getTzgTypKey(), getJahrIndex());
        }
        return teilzeitgrads;
    }

    public List<Teilzeitgrad> getTeilzeitgrads()
    {
        return teilzeitgrads;
    }

    public void setTeilzeitgrads(List<Teilzeitgrad> teilzeitgrads)
    {
        this.teilzeitgrads = teilzeitgrads;
    }

    @Override
    public void prepare() throws Exception
    {
        // TODO Auto-generated method stub  
    }

    public String getTzgTypKey()
    {
        return tzgTypKey;
    }

    public void setTzgTypKey(String tzgTypKey)
    {
        this.tzgTypKey = tzgTypKey;
    }

    public Integer getJahrIndex()
    {
        return jahrIndex;
    }

    public void setJahrIndex(Integer jahrIndex)
    {
        this.jahrIndex = jahrIndex;
    }
}

Die Aktionszuordnung instruts.xml ist wie folgt definiert:

<action name="*/auth/GroupAdmin/processEditDienstabschnittJahr" method="execute" class="org.hocon.ul.portal.action.DienstabschnittViewJahrAction">
    <result name="success" type="redirect">${referer}</result>
</action>

In meiner JSP-Datei iteriere ich das Modellobjekt und zeige seine Werte in Textfeldern oder Listen wie folgt an:

<ul:form action="auth/GroupAdmin/processEditDienstabschnittJahr">
<s:iterator value="model" status="rowStatus">

<tr>
    <td style="text-align: center;">
        <s:date name="model.get(#rowStatus.index).datumAb" var="datumAb_DE" format="dd.MM.yyyy" />
        <s:textfield style="width:70px;" name="model.get(#rowStatus.index).datumAb" value="%{#datumAb_DE}" label="DatumAb"></s:textfield >
    </td>

    <td style="text-align:center;">
        <s:date name="model.get(#rowStatus.index).datumBis" var="datumBis_DE" format="dd.MM.yyyy" />
        <s:textfield style="width:70px;" name="model.get(#rowStatus.index).datumBis" value="%{#datumBis_DE}" label="DatumBis"></s:textfield >
    </td>

    <td class="currency">
        <s:set var="tzgBetrag">
            <fmt:formatNumber type="NUMBER" maxFractionDigits="0"><s:property value="%{getBetrag()*100}"></s:property></fmt:formatNumber>
        </s:set>
        <s:textfield style="width:30px;" maxlength="3" name="model.get(#rowStatus.index).betrag" value="%{#tzgBetrag}" label="Betrag"></s:textfield >
    </td>
</tr>

</s:iterator>
<s:submit style="width:24px; height:24px;" type="image" src="../../../res/24px/floppy-disk.png" value="Speichern"></s:submit>
</ul:form>

Das ul-Tag stammt aus einer benutzerdefinierten Taglib, die dem Aktionspfad einen kundenspezifischen URL-Parameter hinzufügt.

Wenn ich also die Seite anzeige, werden alle meine Teilzeitgrad-Datensätze mit einer Zeile für jeden Eintrag angezeigt. Aber wenn ich das Formular abschicke, wird die Liste meiner Modelle nicht ausgefüllt. Der SettersetTeilzeitgrads(List<Teilzeitgrad> teilzeitgrads) wird gar nicht erst angerufen. Ich habe auch versucht, auf die Liste in Array-Syntax zuzugreifen:

<s:textfield style="width:70px;" name="teilzeitgrads[#rowStatus.index].datumAb" value="%{#datumAb_DE}" label="DatumAb"></s:textfield >

das hat aber auch nicht geklappt.

Jede Hilfe, die diesen Fall löst, wird geschätzt! Danke im Voraus!

Lenzo

Antworten auf die Frage(5)

Ihre Antwort auf die Frage