如何在struts下实现一个表单提向2个不同的action?(150分!) ( 积分: 50 )

  • 主题发起人 主题发起人 miles^o^
  • 开始时间 开始时间
M

miles^o^

Unregistered / Unconfirmed
GUEST, unregistred user!
我有这样一个需要:在一个页面上用<iterate/>显示出一组用户的数据,对每一条数据后面都跟一个按钮,单击实现对该条用户的修改,也就是传一个id值给userEditAction,另外,每一条都前面都有一个multibox框,一组结束后,有一个按钮,实现对选中数据的删除,也就是将一组id传给userDelAction,怎么实现呢?
我原来的方法是想在下面再定义另一个form,中间放一个隐藏框,当单击修改按钮时,用javaScript语句将对应id传给隐藏框,然后提交带隐藏框的form,当需要提交一组id时,则直接提交即可。但是,问题在于将id传给javaScript非常困难,不知道怎么办。请参看我提的另一个问题http://www.delphibbs.com/delphibbs/dispq.asp?lid=3222681,如果哪位大哥帮我回答这两个问题中的一个的话,2个问题的分都奉上!9月30号早8:30之前回答的话,再送50分!就是150分!我明天晚上要纳品!就靠各位了!
 
我有这样一个需要:在一个页面上用<iterate/>显示出一组用户的数据,对每一条数据后面都跟一个按钮,单击实现对该条用户的修改,也就是传一个id值给userEditAction,另外,每一条都前面都有一个multibox框,一组结束后,有一个按钮,实现对选中数据的删除,也就是将一组id传给userDelAction,怎么实现呢?
我原来的方法是想在下面再定义另一个form,中间放一个隐藏框,当单击修改按钮时,用javaScript语句将对应id传给隐藏框,然后提交带隐藏框的form,当需要提交一组id时,则直接提交即可。但是,问题在于将id传给javaScript非常困难,不知道怎么办。请参看我提的另一个问题http://www.delphibbs.com/delphibbs/dispq.asp?lid=3222681,如果哪位大哥帮我回答这两个问题中的一个的话,2个问题的分都奉上!9月30号早8:30之前回答的话,再送50分!就是150分!我明天晚上要纳品!就靠各位了!
 
你就不会在一个Action里多做一点事啊。
提交给两个action是别想了,即使可以实现也是一个很糟糕的做法。
 
bird大哥,说详细一点啊,提交给一个action,怎么在execute里判断是哪个按钮提交的阿?对于针对每一条的编辑按钮来说,提交的 formbean都是一个字符串数组,怎么判断哪一个是自己要的阿?50分bonus延期到12:30!
 
采用URL方式提交,或者写一个提交的js。
url方式类似于下面的。
xxxx.do?actionid=del&amp;id=xxxxx
actionid表示你要进行的操作。
id表示你要操作的纪录的编号。
 
写段 js
form.action=&quot;*&quot;;
在 * 的位置写你的提交地址
 
我把那个问题也贴过来好了,注意难点在于要传的id是由<iterate>动态生成的。直接放到javascript的()内会出错。另外,bird哥,按你的写法,对应在action里面怎么接收?或者给我一个资料地址我自己去看
function setScoreInfoId(id)
{
document.forms[1].id.value = id;
document.forms[1].submit();
}
<html:form action=&quot;add&quot;>
<logic:iterate name=&quot;result&quot;
id=&quot;usb&quot;>
<td align=&quot;CENTER&quot;>
<html:multibox property=&quot;scoreAddId&quot;><bean:write name=&quot;usb&quot;
property=&quot;id&quot;/></html:multibox>
</td>
<td align=&quot;CENTER&quot;><bean:write name=&quot;usb&quot;
property=&quot;id&quot;/></td>
<td align=&quot;CENTER&quot;><bean:write name=&quot;usb&quot;
property=&quot;nm&quot;/></td>
<td align=&quot;CENTER&quot;><bean:write name=&quot;usb&quot;
property=&quot;scr1&quot;/></td>
<td align=&quot;CENTER&quot;><bean:write name=&quot;usb&quot;
property=&quot;scr2&quot;/></td>
<td align=&quot;CENTER&quot;><bean:write name=&quot;usb&quot;
property=&quot;scr3&quot;/></td>
<td align=&quot;CENTER&quot;><html:link href=&quot;JavaScript:void setScoreInfoId(<bean:write name=&quot;usb&quot;
property=&quot;id&quot;/>)&quot;>
<img src=&quot;http://localhost:8080/bear/img/detail.gif&quot;
width=&quot;78&quot;
height=&quot;26&quot;
border=&quot;0&quot;>
</html:link></td>
</logic:iterate>
</html:form>
<html:form action=&quot;edit&quot;>
<html:hidden property=&quot;id&quot;/>
</html:form>
 
建议你不要采用表单提交的方式,直接通过URL调用。
假设你对应的ACTION为vxAction.do
你可以通过URL将参数传给这个ACTION。
假设你FORM中有两个属性
int id;//要操作的对象的编号
String actionId;//要执行的操作。
你使用URL传递参数
vxAction.do?id=<bean:write name=&quot;usb&quot;
property=&quot;id&quot;/>&amp;actionId=del
在Action中
if (&quot;del&quot;.equals(form.getActionId)) {
//执行删除操作
}
if (&quot;xx&quot;.equals(form.getActionId)) {
//执行XX操作
}
--------具体的ACTION
package net.xxx.demo;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
public class EditAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) {
demoActionForm form = (demoActionForm) actionForm;
if (&quot;add&quot;.equalsIgnoreCase(form.getUserAction())) {
}
if (&quot;update&quot;.equalsIgnoreCase(form.getUserAction())) {
}
return actionMapping.findForward(&quot;list&quot;);
}
}
这下够详细了吧。
 
我知道怎么回事了,其实就是双引号不能嵌套的问题,里层换单引号就好了,一个月前我还非常白痴,没想到大家也没看出来,晕
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部