java - ¿Cómo utilizar los parámetros, las solicitudes y los objetos de sesión presentes en ActionContext?
session struts2 (2)
primero
ActionContext''s Request object is equivalent to the Request object in Servlets
Segundo
Si está utilizando framework como struts. Es una mala practica No necesita crear objetos HttpServletRequest desde ServletActionContext para obtener los parámetros de solicitud. Simplemente declare los parámetros de solicitud en la clase de acción y los captadores y ajustadores de escritura para ellos obtendrán los valores en ellos.
ACTUALIZAR
Si quería su parámetro de solicitud en la clase de acción, puede hacerlo así:
public class MyAction extends ActionSupport implements SessionAware{
private String operatorId;
private Map<String, Object> session;
//Getter and setters
public String getOperatorId() {
return operatorId;
}
public void setOperatorId(String operatorId) {
this.operatorId = operatorId;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
Entonces, si quisiera usar operatorId
cualquier lugar, todo lo que haré es getOperatorId()
o use operatorId
directamente. :)
Si encuentro la implementación de SessionAware
en la clase Action más razonable, ya que puedo acceder directamente a objetos de sesión como @Andrea ha mencionado ... Ahora puedo usar directamente session.put("OperatorId", operatorId);
y session.put("AnalysisNames",analysisNames);
Aquí en este código estoy usando ActionContext para obtener Session y ServletActionContext desde el objeto Request. Siento que esta es una mala práctica, ya que uno debe usar ActionContext solo para el objeto Request.
¿El objeto Request de ActionContext es equivalente al objeto Request en Servlets? En caso afirmativo, ¿cómo obtener los parámetros de solicitud usándolo?
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);
En Struts2, el Mapa de sesión y el Mapa de solicitud son envoltorios para los objetos HttpServletRequest y Session subyacentes.
Si solo necesita acceder a los atributos, use los contenedores.
Use ActionContext para obtenerlos (tanto los wrappers como los objetos HTTP subyacentes) solo si se encuentra dentro de un Interceptor
o un POJO
.
Si se encuentra dentro de una Action
, la mejor práctica es implementar una Interfaz que llene automáticamente el objeto de su Acción:
Para obtener el contenedor de solicitud de mapa , use RequestAware
public class MyAction implements RequestAware {
private Map<String,Object> request;
public void setRequest(Map<String,Object> request){
this.request = request;
}
}
Para obtener el contenedor de Mapa de sesión , use SessionAware
public class MyAction implements SessionAware {
private Map<String,Object> session;
public void setSession(Map<String,Object> session){
this.session = session;
}
}
Para obtener los objetos subyacentes HttpServletRequest y HttpSession , 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();
}
}
Dicho esto, el flujo de datos estándar entre páginas JSP y Acciones, o Acciones y Acciones, se obtiene a través de Accessors / Mutators, más conocidos como Getters y Setters. No reinventar la rueda.