今天才知道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 执行前面
  这是所有方法前的处理

 

【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】