是否为struts2动作类提供了任何init方法?

时间:2009-05-29 12:52:46

标签: java struts2

是否为struts 2 action类提供了可以在该action类的每个方法之前调用的init方法?

例如,我有一个struts 2的动作类,如下所示

import com.opensymphony.xwork2.ActionSupport;

public class EmployeeAction extends ActionSupport{

    private  DepartmentDaoService deptService = new DepartmentDaoService() ;
    private  EmployeeDaoService empService = new EmployeeDaoService();
    private Employee employee;
    private List<Employee> employees;
    private List<Department> departments;

       public void init()
       {
          //Do initialization stuff here
       }

       public String getAllEmployees(){
          employees = empService.getAllEmployees();
          return "success";
       }

       public String deleteEmployee(){
        empService.deleteEmployee(employee.getEmployeeId());
        return "success";
       }
}

现在,在上面的代码中调用getAllEmployees()deleteEmplyee()的struts操作时,我希望首先执行init()方法。我们可以通过从两个函数调用它来运行它。

但struts 2中是否有任何规定会在每次调用时自动运行init方法,或者struts 2为action clases提供任何此类方法?

如果有人知道,请告诉我。

感谢。

4 个答案:

答案 0 :(得分:8)

答案 1 :(得分:7)

是的,有:

首先,您的操作类必须实现Preparable interface。然后,您的操作必须实现Preparable.prepare()方法。 Struts 2每次调用你的action方法之前都会执行prepare()。

干杯。

答案 2 :(得分:1)

准备拦截器是可行的方法。如果您的操作使用默认拦截器堆栈,只需将您的init()方法重命名为 prepare()

如果您的操作类有多个操作方法(如createEmployee()或deleteEmployee()),您可以使用名为prepare<*ActionMethodName*>()的方法对具体方法进行特定准备(例如 prepareDeleteEmployee() )。

答案 3 :(得分:0)

init() 

在创建拦截器之后调用,但在使用拦截处理任何请求之前调用,让Interceptor有机会初始化任何所需的资源。

See this