action方法调用的问题

老框架二次开发,出了一点问题,请高手解惑,先看代码:publicActionForwardexecute(ActionMappingmapping,ActionFormf... 老框架二次开发,出了一点问题,请高手解惑,先看代码:

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,httpServletResponse response)throws Exception {

String method = request.getParameter("method");
if ("removeSong".equals(method)) {
return removeSong(mapping, form, request, response);
}
else{
return mapping.findForward("success");
}
public ActionForward removeSong(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {
........
return mapping.findForward("removeSong");
}

这是我写的代码,觉得很奇怪吧,因为尽管继承了DispatchAction。但是还是无法通过method调用execute之外的方法,而是不管.do?meghod=什么都会进入execute。所以只能手动用if控制进入哪个方法了
问题一,为什么不能通过struts1默认的功能调用其他的方法?而是每次都进入execute,问题可能出在什么地方???
问题二,用断点和打印发现,每次通过if跳转到的第二个方法返回的mapping.findForward("removeSong");都会导致execute再被执行一次,所以第二个方法也会执行两次,而如果if不成立而执行execute方法则很正常的操作完返回findForward就结束了,这个问题让我百思不得其解,问题可能出现在什么地方?
展开
 我来答
匿名用户
2015-08-08
展开全部
  动态方法调用:
  Struts2支持动态方法调用,它指的是一个Action中有多个方法,系统根据表单元素给定的action来访问不同的方法,而不用写多个Action。
  使用动态方法调用前必须设置Struts2允许动态方法调用,它是通过设置
  struts.enable.DynamicMethodInvocation = true来完成的。
  Struts2有多种方式实现动态方法调用(以下action请求的后缀均设置为do,而非默认的action):
  (1). 修改页面Form的action请求方式
  将页面上action的请求方式改为:action = “ActionName!MethodName.do”,示例:
  Login.jsp
  ……
  var contextPath = “<%=request.getContextPath()%>”;
  <script type=”text/javascript”>
  function dynamicMethodInvoke(){
  document.forms[0].action = contextPath + “Login!dynamicMethod.do”;
  document.forms[0].submit();
  }
  </script>
  ……
  <input type=”button” value=”动态方法调用” onclick=”dynamoicMethodInvoke()”/>

  ……

  当点击“动态方法调用”按钮时,执行dynamoicMethodInvoke方法,在此方法中修改提交的action为Login!dynamicMethod.do,它的意思是将表单提交给Login Action的dynamicMethod方法进行处理。
  LoginAction.java

  public class LoginAction {

  ……

  public String dynamicMethod() throws Exception{

  ……
  return “success”;
  }
  public String execute() throws Exception{

  ……

  if (…){

  return “error”;

  }

  ……

  return “success”
  }

  }
  通过这种方式,可以在一个Action中包含多个方法,通过指定不同的action属性来提交给Action的不同方法进行处理。
  对于使用动态方法调用的方法,它的声明与系统默认的execute方法的方法声明只有方法名不同,其他的如参数、返回值类型都必须相同。
lyglcheng
2010-07-05 · 超过15用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:24.6万
展开全部
这个是我的配置文件 多了一个 parameter="method"

<action attribute="userForm" name="userForm"
parameter="method" path="/user" scope="request"
type="cn.goldenbean.struts.action.xt.UserAction"
validate="false" />

访问的时候 user.do?method="XXX" 你要访问的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0394703
2010-07-04 · 超过31用户采纳过TA的回答
知道答主
回答量:149
采纳率:0%
帮助的人:96万
展开全部
你既然用分发action了 怎么还这么写呢?
直接配置文件了parameters属性给个method 然后前台
*.do?method=removeSong 不就完事了 - - ?
是不parameters没设置 所以他去找默认的execute?
用分发 就不用些execute了 直接全改成想调用方法的名字就完了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式