Java 如何在struts迭代器生成的单个表单中调用多个操作
我有一个票证对象列表,我正在使用struct标记在jsp中显示这些对象。列表工作正常,行渲染正确。我需要做的是为每一行提供两个功能-详细信息和更新 我的JSP的一部分Java 如何在struts迭代器生成的单个表单中调用多个操作,java,jsp,jakarta-ee,struts2,Java,Jsp,Jakarta Ee,Struts2,我有一个票证对象列表,我正在使用struct标记在jsp中显示这些对象。列表工作正常,行渲染正确。我需要做的是为每一行提供两个功能-详细信息和更新 我的JSP的一部分 <script type="text/javascript"> function details() { document.forms['ticketForm'].action="viewTicket.do"; document.forms['ticketForm'].submit(); } <
<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>
函数详细信息()
{
document.forms['ticketForm'].action=“viewTicket.do”;
document.forms['ticketForm'].submit();
}
规则();
现在的问题是:
1) UpdateCket操作可以正常工作,但viewTicket操作(通过javascript呈现的操作)不能正常工作。无论单击哪一行,它都会调用第2行中的票证详细信息。如果我在第二个操作中使用s:submit而不是s:submit,那么表单的默认操作,即updatecket将一直被调用。我怎样才能解决这个问题
2) 第1行中的更新票证不起作用。它总是重新加载同一页并做一些奇怪的事情。但是,更新票证操作在所有其他行中都正常工作。您从何处读取票证id,您应该显示其详细信息 我想这是一个,但请记住,您使用的是一个迭代器,id是一个常量。因此它只能保存一个值,这将是迭代器的最后一个值。尝试从浏览器查看html生成源代码,查看此字段的值 解决方法: 改为(更新和查看): s:url 及 s:param 样本
<s:url action="urlTagAction.action" >
<s:param name="id">123</s:param>
</s:url>
123
尝试为每个表单分配不同的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>
function details(index)
{
document.forms['ticketForm'+index].action="viewTicket.do";
document.forms['ticketForm'+index].submit();
}
希望这能有所帮助:)这很有效!!非常感谢你。但我的另一个问题仍然存在——第一排的所有动作都不起作用。无…当您从第一行提交表单时,服务器控制台是否出现异常?无异常。没什么。客户端代码看起来也不错。可能是内部的。当你提交浏览器中出现的url是什么