2009-05-29 3 views
7

Esiste un metodo di init fornito per la classe di azione struts2 che può essere chiamato prima di ogni metodo di quella classe di azioni?Esiste un metodo init per la classe di azione struts2?

Ad esempio, ho una classe di azione per montanti 2, come indicato di seguito

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

Ora, nel codice di cui sopra, quando l'azione puntoni per getAllEmployees() e deleteEmplyee() è chiamato voglio metodo init() per eseguire primo. Possiamo eseguirlo chiamandolo da entrambe le funzioni.

Ma c'è qualche disposizione data nei puntoni 2 che eseguirà il metodo init automaticamente su ogni chiamata o puntone 2 fornisce un tale metodo per le clases di azione?

Per favore dimmi se qualcuno lo sa.

Grazie.

risposta

6

sì, c'è:

Prima di tutto, la classe azione deve implementare l'interfaccia essere preparati. Quindi, l'azione deve implementare il metodo Preparable.prepare(). Strut 2 eseguirà prepare() ogni volta prima che invochi il tuo metodo di azione.

Cheers.

1

Preparare Interceptor è strada da percorrere. Se la tua azione utilizza stack intercettore predefinito, rinomina il tuo metodo init() in prepare().

Se la classe azione ha più metodi di azione (come createEmployee() o deleteEmployee()) si può fare una preparazione specifica per il metodo di calcestruzzo con metodo chiamato prepare<*ActionMethodName*>() (ad es prepareDeleteEmployee()).

+0

Grazie rdk. È un'informazione molto utile. – amar4kintu

0

init() 

Chiamato dopo la creazione di un intercettore, ma prima di eventuali richieste vengono elaborate utilizzando intercettare, dando l'Interceptor la possibilità di inizializzare tutte le risorse necessarie.

See this