私はしばらくこれを研究してきました。Struts2を使用してJSPに表示されたリストの内容を更新する方法を読みまし たか? それは私が必要とするものに非常に近いですが、私はまだ問題を解決することができません.
オブジェクトの java.util.Set があります。クラスは「Event」で、セットの名前は「events」です。ユーザーが Event オブジェクトの属性を変更できるフォームを JSP で表示したいのですが、一度に複数のオブジェクトを更新したいと考えています。これが私のJSPスニペットです:
<s:form theme="simple">
<table>
<s:iterator value="events" var="ev">
<tr>
<td> <s:textfield name="?????" value="%{#ev.price}" </td>
<td> <s:textfield name="?????" value="%{#ev.amount}" </td>
</tr>
</s:iterator>
<tr><td colspan="2">
<s:submit value="Apply" action="EditEventsAction_save" ></s:submit>
</td></tr>
</table>
</s:form>
私の問題は、セットを更新するためにテックスフィールドの名前に何が必要かということです。
テキストフィールドのデータがセットのメンバーを更新するように指定するにはどうすればよいですか?
これは可能ですか?
アップデート
これは私の最新の (簡略化された) 試みであり、主に型変換ドキュメントで読んだ内容に基づいています。
フォームは正しく入力されていますが、テキストフィールドに入力された変更は送信時にキャプチャされません。
アクション クラス:
public class TestAction extends ActionSupport implements Preparable {
private static HashMap<Integer, AssetId> assetMap = new HashMap<Integer, AssetId>();
public String execute () {
return SUCCESS;
}
public void prepare() throws Exception {
AssetId a1 = new AssetId(1, "Asset 1");
AssetId a2 = new AssetId(2, "Asset 2");
AssetId a3 = new AssetId(3, "Asset 3");
assetMap.put(1, a1);
assetMap.put(2, a2);
assetMap.put(3, a3);
}
public String save () {
return SUCCESS;
}
public static HashMap<Integer, AssetId> getAssetMap() {
return assetMap;
}
public static void setAssetMap(HashMap<Integer, AssetId> assetMap) {
TestAction.assetMap = assetMap;
}
}
JSP:
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
<s:form theme="simple">
<table>
<s:iterator value="assetMap" var="asset">
<tr>
<td><s:textfield name="assetMap[key].clientId" /></td>
</tr>
</s:iterator>
<tr><td colspan="2"><s:submit value="Apply!" action="TestAction_save" /></td></tr>
</table>
</s:form>
</body>
</html>
AssetId
クラス:
public class AssetId implements java.io.Serializable {
private int assetId;
private String clientId;
// And public getters/setters
}
TestAction-conversion.properties
Key_assetMap=java.lang.Integer
Element_assetMap=AssetId
CreateIfNull_assetMap=false