Struts2请求为null

时间:2011-09-18 08:16:57

标签: struts2 request actioncontext

我有非常奇怪的错误,当我尝试访问它时,我收到请求为null。我总是使用相同的方法来获取它,但现在我遇到了这个错误。

我的行动如下:

package com.deveto.struts.actions;

import com.deveto.hibernate.mappings.Slider;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.ServletContextAware;


/**
 *
 * @author denis
 */
public class ContentAction extends ActionSupport implements ServletContextAware {

HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
ActionContext ac = ActionContext.getContext();
ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);

@Override
public String execute() throws Exception {

    System.out.println("request: " + request);

    return SUCCESS;
}

public ActionContext getAc() {
    return ac;
}

public void setAc(ActionContext ac) {
    this.ac = ac;
}

public HttpServletRequest getRequest() {
    return request;
}

public void setRequest(HttpServletRequest request) {
    this.request = request;
}

public HttpServletResponse getResponse() {
    return response;
}

public void setResponse(HttpServletResponse response) {
    this.response = response;
}

public ServletContext getSc() {
    return sc;
}

public void setSc(ServletContext sc) {
    this.sc = sc;
}

public void setServletContext(ServletContext sc) {
    this.sc = sc;
}
}

现在我什么都不做,请求总是为空

 request: null

1 个答案:

答案 0 :(得分:2)

实施ServletRequestAware界面并在此处设置request变量,而不是在构建期间执行此操作。

但通常你不需要访问请求,因为struts的params拦截器完成了需要请求对象的所有工作。

来自ServletRequestAware - 接口的文档:

所有想要访问servlet请求对象的操作都必须实现此接口。

只有在servlet环境中使用Action时,此接口才有意义。

请注意,使用此接口会将Action绑定到servlet环境,因此应尽可能避免使用它,因为单元测试等内容将变得更加困难。