Struts 1.3中的多个“提交”按钮

时间:2011-09-12 10:43:19

标签: struts struts-1

我的JSP中有这个代码:

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
..
..
<html:form action="update" >
  ..
  ..
  <html:submit value="delete" />
  <html:submit value="edit" />
  <html:sumit value="update" />
</html:form>

这在struts-config.xml文件中:

<action path="/delete" name="currentTimeForm" input="/viewall.jsp" type="com.action.DeleteProduct">
   <forward name="success" path="/viewall.jsp" />
   <forward name="failure" path="/viewall.jsp" />
</action>

delete操作一样,我有editupdate。它工作得很好,如果我给出的名称特别像<html:form action="delete">但是,如何让它动态地适用于updateedit

2 个答案:

答案 0 :(得分:19)

您有一个表单和多个提交按钮。问题是表单只能提交一个操作,无论表单中有多少提交按钮。

现在想到三个解决方案:

1。只需提交一个操作即可提交所有内容。进入Action类后,检查用于提交表单的按钮,并根据该按钮执行适当的处​​理。

<html:form action="modify">
  ..
  ..
  <html:submit value="delete"/>
  <html:submit value="edit" />
  <html:sumit value="update" >
</html:form>

ModifyAction.execute(...)方法中有类似的内容:

if (request.getParameter("delete") != null || request.getParameter("delete.x") != null) {
   //... delete stuff
} else if (request.getParameter("edit") != null || request.getParameter("edit.x") != null) {
   //...edit stuff
} else if (request.getParameter("update") != null || request.getParameter("update.x") != null) {
   //... update stuff
}

2. 在提交表单之前,使用JavaScript更改HTML表单的action属性。首先使用附加的点击处理程序将提交按钮更改为普通按钮:

<html:form action="whatever">
  ..
  ..
  <html:button value="delete" onclick="submitTheForm('delete.do')" />
  <html:button value="edit" onclick="submitTheForm('edit.do')" />
  <html:button value="update" onclick="submitTheForm('update.do')" />
</html:form>

使用处理程序:

function submitTheForm(theNewAction) {
  var theForm = ... // get your form here, normally: document.forms[0]
  theForm.action = theNewAction;
  theForm.submit();
}

3。使用DispatchAction(一个类似于第1点的Action类),但不需要测试点击了哪个按钮,因为DispatchAction处理了该按钮。

您只需提供三个名为deleteeditupdate的正确执行方法。 Here is an example that explains how you might do it

总结:对于数字1,我​​真的不喜欢那些丑陋的测试....对于数字2,我真的不喜欢你必须玩这个动作的事实使用JavaScript的形式,所以我个人去第3个

答案 1 :(得分:0)

还有另一种更简单的方法可以做到如下:

在ActionForm currentTimeForm中,添加一个String属性(例如:buttonClicked)。

在jsp中,在每个html:submit标签中添加此属性。

现在在动作执行方法中只需检查此属性的值,即

if(currentTimeForm.getButtonClicked().equals("delete"){
}
else if((currentTimeForm.getButtonClicked().equals("edit"))

依旧......