首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ActionContext中的参数、请求和会话对象?

如何使用ActionContext中的参数、请求和会话对象?
EN

Stack Overflow用户
提问于 2013-10-23 18:19:11
回答 2查看 18.1K关注 0票数 2

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

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

代码语言:javascript
复制
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

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-23 19:43:40

在Struts2中,会话映射和请求映射是底层HttpServletRequest和会话对象的包装器。

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

如果您在InterceptorPOJO中,请使用ActionContext获取它们(包装器和底层HTTP对象)。

如果您在Action中,最佳实践是实现一个接口,该接口将自动填充操作的对象:

要获取请求映射包装器,请使用use RequestAware

代码语言:javascript
复制
public class MyAction implements RequestAware {
    private Map<String,Object> request;

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

要获取会话映射包装器,请使用use SessionAware

代码语言:javascript
复制
public class MyAction implements SessionAware {
    private Map<String,Object> session;

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

若要获取基础HttpServletRequestHttpSession对象,请使用use ServletRequestAware

代码语言:javascript
复制
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页面和动作或动作和动作之间的标准数据流是通过访问器/变更器(更为人所知的是better和better)获得的。不要重复发明轮子。

票数 7
EN

Stack Overflow用户

发布于 2013-10-23 19:38:49

First

代码语言:javascript
复制
ActionContext's Request object is equivalent to the Request object in Servlets

第二个

如果你使用的是像struts这样的框架。这是一种糟糕的做法。获取请求参数不需要从ServletActionContext创建HttpServletRequest对象。只需在操作类中声明请求参数,并为它们编写getter和setter就可以在其中获取值。

更新

如果你想让你的请求参数出现在action类中,你可以这样做:

代码语言:javascript
复制
    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;

    }
    }

所以现在,如果我想在任何地方使用operatorId,我要做的就是使用getOperatorId()或者直接使用operatorId。:)

如果发现在Action类中实现SessionAware更合理,因为我可以直接访问会话对象,如@Andrea所提到的..所以现在我可以直接使用session.put("OperatorId", operatorId);session.put("AnalysisNames",analysisNames);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19538970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档