2009-05-29 16 views
7

Có phương thức init nào được cung cấp cho lớp hành động struts2 có thể được gọi trước mọi phương thức của lớp hành động đó không?Có phương thức init nào cho lớp hành động struts2 không?

Ví dụ, tôi có một lớp hành động cho thanh chống 2 như đưa ra dưới đây

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"; 
     } 
} 

Bây giờ trong mã trên khi thanh chống hành động cho getAllEmployees() và deleteEmplyee() được gọi Tôi muốn init() phương pháp để thực hiện Đầu tiên. Chúng ta có thể chạy nó bằng cách gọi nó từ cả hai hàm.

Nhưng có bất kỳ điều khoản nào được đưa ra trong thanh 2 mà sẽ chạy phương thức init tự động trên mỗi cuộc gọi hoặc thanh chống 2 cung cấp bất kỳ phương pháp nào cho các hành động không?

Hãy cho tôi biết nếu có ai biết.

Cảm ơn.

Trả lời

6

Có:

Trước hết, lớp hành động của bạn phải triển khai giao diện Có thể chuẩn bị. Sau đó, hành động của bạn phải thực hiện phương thức Preparable.prepare(). Strut 2 sẽ thực hiện chuẩn bị() mọi lúc trước khi nó gọi phương thức hành động của bạn.

Chúc mừng.

1

Chuẩn bị Interceptor là con đường để đi. Nếu tác vụ của bạn đang sử dụng ngăn chặn chặn mặc định, chỉ cần đổi tên phương thức init() của bạn thành prepare().

Nếu lớp hành động của bạn có nhiều phương pháp hành động (như createEmployee() hoặc deleteEmployee()) bạn có thể làm để chuẩn bị cụ thể cho phương pháp bê tông với phương thức có tên prepare<*ActionMethodName*>() (ví dụ prepareDeleteEmployee()).

+0

Cảm ơn rdk. Đó là thông tin rất hữu ích. – amar4kintu

0

init() 

gọi sau khi một đánh chặn được tạo ra, nhưng trước bất kỳ yêu cầu được xử lý bằng đánh chặn, cho Interceptor một cơ hội để khởi tạo bất kỳ nguồn lực cần thiết.

See this

Các vấn đề liên quan