java - 如何使用 ActionContext 中存在的参数、请求和 session 对象?

标签 java session struts2 request struts-action

在此代码中,我使用 ActionContext 从 Request 对象获取 Session 和 ServletActionContext。我觉得这是一种不好的做法,因为必须仅将 ActionContext 用于 Request 对象。

ActionContext 的 Request 对象是否等同于 Servlet 中的 Request 对象?如果是,如何使用它获取请求参数?

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

最佳答案

在Struts2中,Session Map和Request Map是底层HttpServletRequest和Session对象的包装器。

如果您只需要访问属性,请使用包装器。

仅当您位于 InterceptorPOJO 内部时,使用 ActionContext 来获取它们(包装器和底层 HTTP 对象)。

如果您位于 Action 中,最佳实践是实现一个将自动填充您的 Action 对象的接口(interface):

<小时/>

要获取请求 map 包装use RequestAware

public class MyAction implements RequestAware {
    private Map<String,Object> request;

    public void setRequest(Map<String,Object> request){ 
        this.request = request;
    }
}

要获取 session 映射包装use SessionAware

public class MyAction implements SessionAware {
    private Map<String,Object> session;

    public void setSession(Map<String,Object> session){ 
        this.session = session;
    }
}

要获取底层 HttpServletRequestHttpSession 对象,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();
    }
}

也就是说,JSP 页面和 Actions、或者 Actions 和 Actions 之间的标准数据流是通过 Accessors/Mutators(更广为人知的 Getters 和 Setters)获得的。不要重新发明轮子。

关于java - 如何使用 ActionContext 中存在的参数、请求和 session 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19538970/

相关文章:

ruby-on-rails - rails 中的 session 和 user_id

jquery - 从 struts2 操作返回 JSON 消息

java - jqGrid 无法使用 @Transactional 加载

Java NullPointerException,游戏开发,图像对象问题

node.js - 如何从 socket.io 实例内的 koa-session 获取 session 信息?

php CURL - 多个独立 session - 需要帮助!

java - 用户注册的确认电子邮件如何工作?

java - Spring 3 MVC session 变量的生存时间是多久?

java - java中是否有 "NameValueCollection"和 "CultureInfo"类的等价物?

java - 整体架构和微服务架构的 API/服务消费之间是否存在技术差异?