在我的Struts2应用程序中,我使用像
这样的迭代器标记生成一个文本报告(在jsp中)<table>
<tr>
<td>ID</td>
<td>PROOF</td>
<td>DELETE</td>
</tr>
<s:iterator value="listOfVOClassObjects">
<tr>
<td><s:property value="requestId" /></td>
<td><s:property value="requestChecker" /></td>
<td><s:property value="requestProof" /></td>
<td><s:checkbox name="deleteStatus" onclick="submit()"/></td>
</tr>
</s:iterator>
</table>
当用户单击复选框页面提交并且控制转到动作类时,我需要同时用户检查的相应行的值应该在VO类中编写的setter方法中设置,以便我可以在我的中获取所有这些值行动课。
我试过这个,为迭代器标签下的每个值写一个隐藏字段,如
<s:hidden name=" requestId" />
<s:hidden name=" requestChecker" />
<s:hidden name=" requestProof" />
但它没有返回相应行的值,而是以逗号分隔的所有行的值。
我也尝试过在迭代器标记之外编写这些隐藏字段,并为每个字段返回null。
请帮忙。
答案 0 :(得分:1)
您可以更新submit()方法以获取正确的值并将其传递给操作。
答案 1 :(得分:1)
在你的javascript函数中,你可以设置当前值然后提交。所以你会有这样的事情:
<form method="post" action="myAction">
<script>
function submitform(requestId, requestChecker, requestProof) {
document.findElementById('requestId').value = requestId;
document.findElementById('requestChecker').value = requestChecker;
document.findElementById('requestProof').value = requestProof;
document.forms[0].submit();
}
</script>
<s:hidden id="requestId" name="requestId" />
<s:hidden id="requestChecker" name="requestChecker" />
<s:hidden id="requestProof" name="requestProof" />
<table>
<tr>
<td>ID</td>
<td>PROOF</td>
<td>DELETE</td>
</tr>
<s:iterator value="listOfVOClassObjects">
<tr>
<td><s:property value="requestId" /></td>
<td><s:property value="requestChecker" /></td>
<td><s:property value="requestProof" /></td>
<td><s:checkbox name="deleteStatus" onclick="submitForm('<s:property value="requestId" />', '<s:property value="requestChecker" />', '<s:property value="requestProof" />');"/></td>
</tr>
</s:iterator>
</table>
</form>
答案 2 :(得分:0)
这取决于你在做什么。如果您可以在服务器端重新创建List,那么您需要做的就是POST要获取句柄的列表的索引。例如:
<s:iterator value="myList" status="row">
...
<s:checkbox onclick="deleteRow(%{#row.index})"/>
</s:iterator>
<script>
function deleteRow(index){
location.href=delete?listIndex=index
}
</script>
您可以使用listIndex的setter来“接收”该值。这是使用GET,如果你想要POST,你可以这样做,并使listIndex成为隐藏字段。
但是,如果您无法在服务器上重新创建列表,因为用户已在浏览器中以某种方式修改了列表,您需要保留该列表,那么您需要Struts2根据POST'd参数创建列表。你可以用一些特殊的语法来做到这一点。
<s:iterator value="myList" status="row">
<s:hidden name="myList[%{#row.index}].requestId"/>
<s:hidden name="myList[%{#row.index}].requestChecker"/>
<s:hidden name="myList[%{#row.index}].requestProof"/>
</s:iterator>
这将创建名称为myList [0] .requestId ... myList [5] .requestProof的字段。如果您在操作中有myList的setter并将这些参数POST到操作中,Struts2将构建List并填充List中对象的属性。您可以使用Generics List myList告诉Struts2 List中有哪些“东西”。如果Generics不适合您,您还可以查看Struts2的类型转换文档。