【问题标题】:Multiple Submit button in Struts 1.3Struts 1.3 中的多个提交按钮
【发布时间】:2011-09-12 10:43:19
【问题描述】:

我的 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。它工作正常,如果我特别指定名称,如 &lt;html:form action="delete"&gt; 但是,如何使其动态地为 updateedit 工作?

【问题讨论】:

    标签: struts struts-1


    【解决方案1】:

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

    现在想到了三个解决方案:

    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
    • 哇。正是我需要的。非常感谢!
    • @user159088:如果使用 i18n 会怎样?该值也是按钮标签。
    【解决方案2】:

    还有另一种更简单的方法如下:

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

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

    现在在动作执行方法中简单地检查这个属性的值,即。

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

    等等……

    【讨论】:

    • 我认为这不是有效的方法。例如,有 10 个表单具有双重或三重提交按钮,您无法继续添加会话或请求变量或向 bean 添加更多变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2021-05-02
    • 2014-09-19
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    相关资源
    最近更新 更多