0

我有一个工单对象列表,我使用 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 行的更新票永远不会起作用。它总是重新加载相同的页面并做一些奇怪的事情。但是,更新票证操作在所有其他行中运行良好。

4

2 回答 2

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();
}

希望这可以帮助 :)

于 2013-04-01T06:55:46.437 回答
0

您从哪里读取应该显示详细信息的票证 ID。

我想这是一个,但请记住您使用的是迭代器,并且 id 是一个常量。所以它只能保存一个值,这将是迭代器的最后一个值。尝试从浏览器查看 html 生成源,以查看该字段的值。

解决方法:改为使用struts 标记(用于更新和视图):

s:网址

s:参数

样本,

<s:url action="urlTagAction.action" >
    <s:param name="id">123</s:param>
</s:url>
于 2013-04-01T05:26:35.637 回答