Como usar parâmetros, solicitações e objects de session presentes no ActionContext?

Aqui neste código eu estou usando ActionContext para obter Session e ServletActionContext do object Request. Eu sinto que isso é uma má prática, pois é preciso usar ActionContext apenas para o object Request.

O object Request do ActionContext é equivalente ao object Request em Servlets? Se sim, como obter parâmetros de solicitação usando-o?

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); 

No Struts2, o Mapa de Sessão e o Mapa de Solicitação são wrappers para os objects HttpServletRequest e Session subjacentes.

Se você precisar apenas acessar atributos, use os wrappers.

Use ActionContext para obtê-los (os wrappers e os objects HTTP subjacentes) somente se você estiver dentro de um Interceptor ou POJO .

Se você estiver dentro de uma Action , a melhor prática é implementar uma interface que preencha automaticamente o object da sua ação:


Para obter o wrapper do Request Map , use RequestAware

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

Para obter o wrapper do Mapa de Sessão , use o SessionAware

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

Para obter os objects HttpServletRequest e HttpSession subjacentes, use 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(); } } 

Dito isso, o stream de dados padrão entre páginas JSP e Ações, ou Ações e Ações, é obtido por meio de Accessors / Mutators, mais conhecidos como Getters e Setters. Não reinvente a roda.

Primeiro

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

Segundo

Se você estiver usando framework como struts. É uma má prática. Você não precisa criar objects HttpServletRequest de ServletActionContext para obter parâmetros de solicitação. Apenas declare os parâmetros de requisição na class de ação e escreva getters e setters para eles, você obterá valores neles.

ATUALIZAR

Se você quisesse seu parâmetro de solicitação na class de ação, você pode fazer assim:

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

Então, agora, se eu quisesse usar o operatorId qualquer lugar, tudo que eu faria seria getOperatorId() ou usaria o operatorId diretamente. 🙂

Se encontrar implementando SessionAware na class Action mais razoável como eu posso acessar diretamente objects de session como @Andrea mencionou .. Então agora eu posso usar diretamente session.put("OperatorId", operatorId); e session.put("AnalysisNames",analysisNames);