私はすでにここでいくつかのアプローチを検索して見つけましたが、私のプロジェクトでそれらを機能させることができません。
オブジェクトのリストの編集ページを表示したいのですが、すべて一度に更新する必要があります。これを実現するためにモデル駆動型アーキテクチャのアプローチを使用していますが、正しく実行できません。リストとその値はいつでも表示および反復できますが、その値を変更することはできません。
これが私が現在行っていることです:
データベースにモデル「Teilzeitgrad」があります。これには、ゲッターとセッターのいくつかの単純な属性があります。
public class Teilzeitgrad {
private Date datumAb;
private Date datumBis;
private double betrag;
// ... getters and setters
}
私のアクションクラスでは、Teilzeitgrad-Objectsのリストを使用してModelDrivenインターフェイスを実装します
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;
}
}
のアクションマッピングstruts.xml
は次のように定義されています。
<action name="*/auth/GroupAdmin/processEditDienstabschnittJahr" method="execute" class="org.hocon.ul.portal.action.DienstabschnittViewJahrAction">
<result name="success" type="redirect">${referer}</result>
</action>
私のJSPファイルでは、モデルオブジェクトを反復処理し、その値を次のようにテキストフィールドまたはリストに表示しています。
<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>
ul-tagは、カスタムtaglibからのものであり、顧客固有のurlパラメーターをアクションパスに追加します。
したがって、このページを表示すると、すべてのTeilzeitgradレコードが各エントリの行とともに表示されます。しかし、フォームを送信すると、モデルのリストが表示されません。セッターsetTeilzeitgrads(List<Teilzeitgrad> teilzeitgrads)
はまったく呼ばれていません。また、array-syntaxのリストにアクセスしようとしました。
<s:textfield style="width:70px;" name="teilzeitgrads[#rowStatus.index].datumAb" value="%{#datumAb_DE}" label="DatumAb"></s:textfield >
しかし、これも機能しませんでした。
このケースを解決するための助けはありがたいです!前もって感謝します!
レンツォ