我已经研究了一段时间。我已经阅读 了如何使用 Struts2 更新 JSP 上显示的列表的内容? 它非常接近我的需要,但我仍然无法解决我的问题。
我有一个 java.util.Set 对象。类是“事件”,集合的名称是“事件”。我想在 JSP 中显示一个表单,允许用户修改 Event 对象的属性,但我想一次更新多个。这是我的 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>
我的问题是(我认为)需要以 texfield 的名称来更新我的 Set。
如何指定文本字段中的数据应该更新我的 Set 的成员?
这可能吗?
更新
这是我最新的(简化的)尝试,主要基于我在类型转换文档中阅读的内容。
表单已正确填充,但在提交时未捕获在文本字段中输入的更改。
动作类:
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