前台代码:
<html:form action="/testAction.do" method="post">
.........
   <html:submit property="action" value="增加">
            <bean:message key="button.add"/></html:submit>
            <div align="center"></div></td>
          <td height="25"><div align="center">
            <html:submit property="action" value="修改">
            <bean:message key="button.updata"/></html:submit>
          </div></td>testAction的代码:package ems.struts;import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;public class testAction extends LookupDispatchAction {
    protected Map getKeyMethodMap()
    {
        HashMap map=new HashMap();
        map.put("button.add","add");//button.delete,按钮的 message key
         map.put("button.update", "update");
        return map;   }
     public ActionForward add(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
     {
        System.out.println("add");
        return null;
    }
    public ActionForward update(ActionMapping mapping,
                                  ActionForm form,
                                   HttpServletRequest request,
                                  HttpServletResponse response)
    {
         System.out.println("updata");
        return null;
    }
    }
配置文件 :::的代码:
<action  parameter="action" path="/testAction" type="ems.struts.testAction">
      <forward name="plan_eng_reg" path="/Basic_Data/plan_eng_reg.jsp" />在资源文件ApplicationResources.properties中
button.add=add
button.updata=updata在运行时出现如下错误!javax.servlet.jsp.JspException: Cannot retrieve definition for form bean null on action /testAction.do
at org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:731)
at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:419)
at jsp_servlet._basic_data.__plan_eng_reg._jspService(__plan_eng_reg.java:305)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)

解决方案 »

  1.   

    button.updata=updata->button.update=update?
      

  2.   

    你在第二次提交的时候用JS吧,这样修改ACTION比较方便!
      

  3.   

    我的方法是在页面上放一个隐藏域,然后再在button的onclick时间中修改隐藏域的值,这样 提交之后就可以通过查看隐藏域来知道要执行什么操作~
      

  4.   

    为什么我在运行时出现如下错误啊!!!!!javax.servlet.jsp.JspException: Cannot retrieve definition for form bean null on action /testAction.do
    at org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:731)
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:419)
    at jsp_servlet._basic_data.__plan_eng_reg._jspService(__plan_eng_reg.java:305)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
      

  5.   

    在你的form中查看一下是否有action这个变量
      

  6.   

    form 有没有定义testAction使用的form?
      

  7.   

    在struts-config.xml配置文件中为action定义一个formbean啊,如
    <form-bean name="testForm" type="xxx">
    <form-property name="" type=""/>
    </form-bean><action 
    name="testForm"
    path="/testAction"
    type="ems.struts.testAction"
    parameter="action">
    <forward name="plan_eng_reg" path="/Basic_Data/plan_eng_reg.jsp" />
    </action>
      

  8.   

    最好的办法是用js提交,submit之前修改Action
      

  9.   

    docment.forms[0].action = "add.do";
    docment.forms[0].submit();
      

  10.   

    你提交的信息是要和你定义的form bean里面的属性对应的,我看你的配置文件里没写出formbean的定义呢
      

  11.   

    我已经定义<form-bean name="testActionForm" type="ems.struts.testActionForm" />了还是报错
    javax.servlet.jsp.JspException: Cannot retrieve definition for form bean null on action /testAction.do
    at org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:731)
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:419)
    at jsp_servlet._basic_data.__plan_eng_reg._jspService(__plan_eng_reg.java:305)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
      

  12.   

    你formbean、action怎么配置的都贴出来
      

  13.   

    function doedit(){
    myForm.action = "****.do?action=edit";
    myForm.submit();
    }
    function doadd(){
    myForm.action = "****.do?action=add";
    myForm.submit();
    }
    <html:form action="****.do">
    <html:button property="button" onclick="doedit()">
    修改
    </html:button>
    <html:button property="button" onclick="doadd()">
    增加</html:button>
    </html:form>
    注意Js中Form名称与你的****.do对应的actionForm一致
      

  14.   

    配置文件 :::的代码:
    <action  parameter="action" path="/testAction" type="ems.struts.testAction">
          <forward name="plan_eng_reg" path="/Basic_Data/plan_eng_reg.jsp" />
    改为:
    <action  parameter="action" path="/testAction" name="testActionForm" type="ems.struts.testAction">
          <forward name="plan_eng_reg" path="/Basic_Data/plan_eng_reg.jsp" />