我有一个票证对象列表,我使用strut标签在我的jsp中显示。列表工作正常,行正确呈现。我需要做的是两个为每一行提供两个功能 - 详细信息和更新
我的JSP的一部分...
<script type="text/javascript">
function details()
{
document.forms['ticketForm'].action="viewTicket.do";
document.forms['ticketForm'].submit();
}
</script>
<s:iterator value="ticketList" var="tl">
<tr>
<!-- The problem form which should call 2 actions -->
<s:form id="ticketForm" action="updateTicket" theme="simple">
<!-- This hidden field is required in both actions -->
<s:hidden name="ticketId" value="%{#tl.id}" />
<td valign="top" width="5%"><s:property value="id" /></td>
<td valign="top"><s:property value="requesterName" /></td>
<td valign="top"><s:property value="guestName" /></td>
<input type="button" value="Details" onClick="Javascript:details()" />
<s:submit value="Update" />
</td>
</s:form>
</tr>
<tr>
<td colspan="10"><script language="JavaScript">Rule();</script></td>
</tr>
</s:iterator>
现在问题: 1)UpdateTicket动作工作正常但不是 viewTicket动作(通过javascript呈现的动作)。无论我点击哪一行,它总是调用第2行中的票证的详细信息。如果我使用s:submit而不是第二个动作,则表单的默认操作,即updateTicket一直被调用。我该如何解决这个问题。
2)第1行中的更新票证永远不会有效。它总是重新加载同一页面并做一些奇怪的事情。但是,更新票证操作在所有其他行中正常工作。
答案 0 :(得分:1)
尝试为每个表单分配不同的ID,然后运行该应用程序。在JSP和Javascript上对代码进行以下更改
JSP更改
<s:iterator value="ticketList" var="tl" status="stat">
<tr>
<!-- The problem form which should call 2 actions -->
<s:form id="ticketForm%{#stat.index}" action="updateTicket" theme="simple">
<!-- This hidden field is required in both actions -->
<s:hidden name="ticketId" value="%{#tl.id}" />
<td valign="top" width="5%"><s:property value="id" /></td>
<td valign="top"><s:property value="requesterName" /></td>
<td valign="top"><s:property value="guestName" /></td>
<input type="button" value="Details" onClick="Javascript:details(<s:property value='%{#stat.index}' />)" />
<s:submit value="Update" />
</td>
</s:form>
</tr>
<tr>
<td colspan="10"><script language="JavaScript">Rule();</script></td>
</tr>
</s:iterator>
Javascript更改
function details(index)
{
document.forms['ticketForm'+index].action="viewTicket.do";
document.forms['ticketForm'+index].submit();
}
希望这会有所帮助:)
答案 1 :(得分:0)
您从哪里读取您应该显示详细信息的票证ID。
我想这是一个,但请记住你使用的是迭代器,而id是一个常量。所以它只能保存一个值,这将是迭代器的最后一个值。尝试从浏览器查看html生成源以查看此字段的值。
解决方法: 而是转到struts tag(对于更新和查看):
S:URL
和
S:PARAM
样品,
<s:url action="urlTagAction.action" >
<s:param name="id">123</s:param>
</s:url>