2

我需要ServletRequest在 Struts2 拦截器(不是动作类)中设置一个属性。

是否ActionContext公开 aMap<String, Object>以控制请求属性,就像它对会话属性所做的那样?

我看到ActionContext实现了一张地图。本身是ActionContext请求属性的包装器吗?

4

2 回答 2

1

ActionContext包含一个保存请求对象的请求键。回答你的问题:不,ActionContext它不是请求的包装器,但是 Struts2 中的请求是 servlet 请求的包装器。

您可以request从动作上下文中获取

HttpServletRequest request = ServletActionContext.getRequest();

这种方式在拦截器中很有用,但在行动中更好地实现ServletRequestAware

protected HttpServletRequest request;

public void setServletRequest(HttpServletRequest request) {
  this.request = request;
}
于 2014-01-22T19:41:58.547 回答
1

对于不在动作类中的代码(RequestAware应该用于动作类),Struts2 可以将 servlet 请求属性公开为 Map。它们可以通过以下方式访问:

Map request = (Map) ActionContext.getContext().get("request");

有关详细信息,请参阅Strus2 文档

于 2014-01-22T20:50:06.547 回答