Come utilizzare parametri, richieste e oggetti di sessione presenti in ActionContext?

Qui in questo codice sto usando ActionContext per ottenere Session e ServletActionContext dall’object Request. Ritengo che questa sia una ctriggers pratica, poiché è necessario utilizzare ActionContext solo per l’object Request.

L’object Request di ActionContext è equivalente all’object Request in Servlet? Se sì, come ottenere i parametri della richiesta che lo utilizzano?

Map session = (Map) ActionContext.getContext().getSession(); HttpServletRequest request = ServletActionContext.getRequest(); String operatorId = request.getParameter("operatorId"); session.put("OperatorId", operatorId); // getting hashmap from Bean analysisNames= slsLoginDetailsRemote.getAnalysisNamesIdMap(); // sending map for multiselect session.put("AnalysisNames",analysisNames); 

In Struts2, la mappa di sessione e la mappa di richiesta sono wrapper per gli oggetti HttpServletRequest e Session sottostanti.

Se hai solo bisogno di accedere agli attributi, usa i wrapper.

Usa ActionContext per ottenerli (sia i wrapper che gli oggetti HTTP sottostanti) solo se sei all’interno di un Interceptor o POJO .

Se ci si trova all’interno di Action , la migliore pratica consiste nell’implementare un’interfaccia che popolerà automaticamente l’object della tua azione:


Per ottenere il wrapper Map richiesta , utilizzare RequestAware

 public class MyAction implements RequestAware { private Map request; public void setRequest(Map request){ this.request = request; } } 

Per ottenere il wrapper Session Map , utilizzare SessionAware

 public class MyAction implements SessionAware { private Map session; public void setSession(Map session){ this.session = session; } } 

Per ottenere gli oggetti HttpServletRequest e HttpSession sottostanti, utilizzare ServletRequestAware :

 public class MyAction implements ServletRequestAware { private javax.servlet.http.HttpServletRequest request; public void setServletRequest(javax.servlet.http.HttpServletRequest request){ this.request = request; } public HttpSession getSession(){ return request.getSession(); } } 

Detto questo, il stream di dati standard tra pagine JSP e Azioni, o Azioni e Azioni, è ottenuto tramite Accessors / Mutators, meglio noti come Getter e Setter. Non reinventare la ruota.

Primo

 ActionContext's Request object is equivalent to the Request object in Servlets 

Secondo

Se stai usando strutture come montanti. È una ctriggers pratica. Non è necessario creare oggetti HttpServletRequest da ServletActionContext per ottenere i parametri di richiesta. Basta dichiarare i parametri di richiesta nella class action e scrivere getter e setter per loro ti daranno dei valori.

AGGIORNARE

Se si desidera il parametro di richiesta nella class action, è ansible farlo in questo modo:

  public class MyAction extends ActionSupport implements SessionAware{ private String operatorId; private Map session; //Getter and setters public String getOperatorId() { return operatorId; } public void setOperatorId(String operatorId) { this.operatorId = operatorId; } @Override public void setSession(Map session) { this.session = session; } } 

Così ora se volessi usare operatorId ovunque tutto ciò che farò è getOperatorId() o getOperatorId() direttamente. 🙂

Se trovi l’implementazione della class SessionAware in Action più ragionevole in quanto posso accedere direttamente agli oggetti di sessione come @Andrea ha menzionato .. Così ora posso usare direttamente session.put("OperatorId", operatorId); e session.put("AnalysisNames",analysisNames);