如何从Struts2中动态创建的提交按钮执行操作

时间:2011-08-04 05:45:36

标签: struts2 iterator submit

我正在使用来自我的动作和迭代器方法的数据在我的jsp中创建一个表。每个表行包含一个发布(提交)按钮。我希望在单击每个发布按钮时执行不同的操作。我还想使用该特定行中包含的数据。我该如何做到这一点?

2 个答案:

答案 0 :(得分:0)

正如你没有提到你在决定行动的条件,我假设你是根据特定表格行中的某些值来做的。你有两个选择

  1. 使用<input type="button" value="publish" onclick="someFunc()">并在someFunc中决定调用哪个操作,并根据该操作更改表单的操作属性。
  2. 提交您的表单,然后在ypur动作类决定调用哪个动作,然后重定向(链)到该动作
  3. 对于基于单击的按钮提交不同的值,您必须在行中具有某些属性,这些属性对于每一行都是唯一的。假设该属性为myUniqueVal

    <s:form name="myform" method="post" action="myaction">
    <s:hidden name="whatever_1"/>
    <s:hidden name="whatever_2"/>
    ..
    </s:form>
    
    <table>
    ...
        <s:iterator value="yourList">
        <tr>
          <td><s:property value="whatever_1"/></td>
          <td><s:property value="whatever_2"/></td>
          .....
          <s:hidden name="whatever_1" id="%{myUniqueVal}1stValueToSubmit" value="%{whatever_1}"/>
          <s:hidden name="whatever_2" id="%{myUniqueVal}2ndValueToSubmit" value="%{whatever_2}"/>
          .....
         <input type="button" value="publish" onclick="submitform('<s:property value="myUniqueVal"/>')">
        </tr>
        </s:iterator>
    </table>
    

    <强>的JavaScript

    function submitform(uniqueval){
    var myform=document.forms[0];
    myform.whatever_1.value=document.getElementById(uniqueval+"1stValueToSubmit").value;
    myform.whatever_2.value=document.getElementById(uniqueval+"2ndValueToSubmit").value;
    //if you are going to use the first soltuion you can choose your action here ased on the above values
    //myform.action="";
    document.forms[0].submit();
    }
    

答案 1 :(得分:0)

您还没有提到,如果要显示的每一行,是否会有唯一的标识符? 让我们假设您的唯一标识符字段是来自Action

的 - firstName和lastName

所以你可以按如下方式遍历你的列表:

 <s:iterator value="listFromAction">
<tr>
            <s:set var="id1" value="%{firstName}" scope="request" />
            <s:set var="id2" value="%{lastName}" scope="request" />
            <td>
                <input type="button" name="Click" value="Click"
                onClick="callAction('<%=request.getAttribute("id1")%>',
                '<%=request.getAttribute("id2") %>')"/>
            </td>
</tr>
</s:iterator>

在迭代中,我们还添加了调用javascript函数的按钮。

现在在这个javascript函数中,你可以调用适当的动作类,具体取决于所选行的值。

 <script language="javaScript">
              function callAction(id1,id2)
              {
                  document.form.firstName.value=id1;
                  document.form.lastName.value=id2;
                  if(id1 == 'Troy' && id2=='Roy')
                     { document.form.action="submit.do";}
                  document.form.submit();
              }

将jsp中的变量firstName和lastName定义为隐藏变量:

<s:hidden name="firstName" />
<s:hidden name="lastName" />