나는 잠시 동안 이것을 연구 해왔다. 나는 How to update a the contents of a list displayed on JSP using Struts2? 을 읽었으며, 내가 필요로하는 것에 아주 가깝지만, 여전히 나의 문제를 해결할 수는 없다.Struts2 - 양식으로 컬렉션을 업데이트하는 방법
개체가 java.util.Set 있습니다. 클래스는 'Event'이고, 집합의 이름은 'events'입니다. JSP에서 사용자가 Event 객체의 속성을 수정할 수 있도록하는 양식을 제시하고자하지만 한 번에 둘 이상을 업데이트하려고합니다.
<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의 이름에 갈 필요 것입니다 : 여기 내 JSP 조각입니다.
텍스트 필드의 데이터가 내 세트 구성원을 업데이트하도록 지정하려면 어떻게해야합니까?
이것이 가능합니까?
UPDATE
이 크게 나는 type conversion docs에서 읽은 내용에 따라 내 최신 (간체) 시도이다.
양식을 올바르게 채우지 만 텍스트 필드에 입력 한 내용은 제출시 캡처되지 않습니다.
Action 클래스 :
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
,
이 값이 의미 반대하는 표시하는지도 나 컬렉션을 사용하여 에. –
나는 HashMap도 시도했다. 올바른 개체를 참조하기 위해 양식에서 키를 사용하는 방법은 분명하지 않습니다. –
각 텍스트 필드에 고유 한 변수 이름을 사용하는 새 버전 (HashMap 사용)과 해시 맵 키가 들어있는 숨겨진 필드가 있습니다. 이들 각각은 Action 클래스에서 String []으로 액세스 할 수 있습니다. 이것은 작동 할 것이지만, 그것은 clunky 보인다. 더 깨끗한 솔루션이 있습니까? –