0

非常に奇妙なエラーが発生しました。アクセスしようとすると、リクエストが 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;
}
}

そして今、私は何もできません、リクエストは常にnullです

 request: null
4

1 に答える 1

2

ServletRequestAware構築中に行うのではなく、インターフェースを実装し、requestそこに変数を設定します。

ただし、struts の params インターセプターが要求オブジェクトに必要なすべての作業を行うため、通常は要求にアクセスする必要はありません。

ServletRequestAware-Interfaceのドキュメントから:

サーブレット リクエスト オブジェクトにアクセスするすべてのアクションは、このインターフェイスを実装する必要があります。

このインターフェースは、アクションがサーブレット環境で使用される場合にのみ関連します。

このインターフェースを使用すると、アクションがサーブレット環境に結び付けられることに注意してください。単体テストなどがより困難になるため、可能であれば回避する必要があります。

于 2011-09-18T08:40:52.893 に答える