struts2中怎么实现Action调用Action

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2中怎么实现Action调用Action相关的知识,希望对你有一定的参考价值。

struts2中怎么实现Action调用Action

意思是我现在一个 登录的 LogAction 的一个方法中要掉用 另一个Action的 一个方法
并且返回数据到页面, 怎么调用

Action 跳转到 Action 最标准的方法是 在result 设置type属性为:"redirectAction"
<result name="list" type="redirectAction">
<param name="actionName">ListAction</param>
<param name="userId">$userId</param>
</result>
其中:actionName 是必须得 为要跳转action的名字。
userId为所带的参数 可以多个 也可以没有。
参考技术A <action name="name" class="LogAction">
<result name="success" type="redirect">another.action</result>
</action>
你是这个意思吗?
或者你 session.setAttribute("name",模块);本回答被提问者采纳
参考技术B 应该把登陆用户,放到Session中进行存储,然后再调用业务的action方法
不过你非要你想的那样的话 我觉得在你执行Logaction时就应该调用dao层的方法然后得到数据后跟用户数据一起返回到页面
参考技术C 你可以在LoginAction中注入你要调用的那个Action,然后直接使用你需要的那个方法就可以了。
如:public class LoginAction()
pirvate 你要调用的Action的接口 实例名;
public String login()
实例名.要调用的方法;
return "success";



不知道能不能帮到你,试试吧!追问

这个我试过来了 不行 才来问百度的 谢谢 慷慨回答

参考技术D public String a() throws Exception
return "";


public String b() throws Exception
return a();


直接返回方法就好了,不知道是不是你想要的。。。

struts2 中 Preparable 接口实现数据准备

  

  今天才知道struts还有Preparable接口,实现此接口需要实现其prepare()方法,调用action中其他方法之前会先调用prepare()方法。此接口和方法可以用于初始化一些数据。

 

测试代码:

package cn.qlq.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

@Namespace("/")
@ParentPackage("default")
public class FirstAction extends ActionSupport implements Preparable {

    private static final long serialVersionUID = 1L;
    private String test;
    @Override
    public void prepare() throws Exception {
        System.out.println("这是所有方法前的处理");
    }

    @Action(value = "test", 
            results = { @Result(name = "success1", location = "/index2.jsp", type = "redirect") ,
                        @Result(name = "error", location = "/index2.jsp") ,
                        @Result(name = "success" ,type = "json" , params = {"root","test"}) 
                        })
    @Override
    public String execute() throws Exception {
        test = "test";
        return super.execute();
    }

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }

    
}

 

 

当我们访问execute方法的时候会先执行prepare()方法。

 

 

  另外,当action种有一个方法叫做haha(),我们可以定义一个prepareHaha()方法,则在访问haha()之前会先访问prepareHaha(),再访问prepare(),最后访问haha(),如下代码:

package cn.qlq.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

@Namespace("/")
@ParentPackage("default")
public class FirstAction extends ActionSupport implements Preparable {

    private static final long serialVersionUID = 1L;
    private String test;
    @Override
    public void prepare() throws Exception {
        System.out.println("这是所有方法前的处理");
    }

    @Action(value = "test", 
            results = { @Result(name = "success1", location = "/index2.jsp", type = "redirect") ,
                        @Result(name = "error", location = "/index2.jsp") ,
                        @Result(name = "success" ,type = "json" , params = {"root","test"}) 
                        })
    @Override
    public String execute() throws Exception {
        test = "test";
        return super.execute();
    }
    
    public void prepareHaha() {
        System.out.println("haha 执行前面");
    }
    @Action(value = "haha" ,results ={@Result(name = "success", location = "/index2.jsp", type = "redirect")} )
    public String haha() throws Exception {
        return super.execute();
    }

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }

    
}

 

结果:

  haha 执行前面
  这是所有方法前的处理

 

以上是关于struts2中怎么实现Action调用Action的主要内容,如果未能解决你的问题,请参考以下文章

struts2 jsp如何获取action值

Struts2 MVC基础介绍

Struts2开发Action知识要点

struts2的ActionProxy

Struts2Action类实现

第三章Struts2 Action中动态方法调用通配符的使用