Как выполнить действие с помощью динамически созданной кнопки отправки в Struts2 - PullRequest
1 голос
/ 04 августа 2011

Я создаю таблицу в моем jsp, используя данные из моего действия и метод итератора. Каждая таблица Row содержит кнопку публикации (отправки). Я хочу, чтобы при нажатии на каждую кнопку публикации выполнялось другое действие. Я также хочу использовать данные, содержащиеся в этой конкретной строке. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 08 августа 2011

Вы не упомянули, будет ли для каждой строки, которую вы хотите отобразить, иметь уникальный идентификатор или нет? Давайте предположим, что ваши поля уникального идентификатора - firstName и lastName - из Action

Таким образом, вы можете перебирать свой список следующим образом:

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

Определите переменные firstName и lastName в вашем jsp как скрытые переменные:

<s:hidden name="firstName" />
<s:hidden name="lastName" />   
0 голосов
/ 04 августа 2011

Поскольку вы не упомянули, при каком условии вы решаете действие, я предполагаю, что вы выполняете его, основываясь на некотором значении в конкретной строке таблицы.У вас есть два варианта

  1. использование <input type="button" value="publish" onclick="someFunc()">, и в someFunc вы решаете, какое действие вызывать, и изменяете атрибут действия формы в соответствии с этим.
  2. отправьте форму, а затем решите в ypurкласс действия, какое действие вызывать, затем перенаправить (цепочку) на это действие

Что касается отправки различных значений в зависимости от нажатой кнопки, в ваших строках должно быть свойство, уникальное для каждой строки.Предположим, что свойство 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();
}
...