Struts2:如何从JSP报告中设置VO类中所选行的相应值?

时间:2009-08-17 10:08:19

标签: struts2

在我的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。

请帮忙。

3 个答案:

答案 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的类型转换文档。