Struts2 ServletActionContext.getServletContext返回null

Struts2 ServletActionContext.getServletContext返回null,struts2,Struts2,其中一个action类具有以下fromDate字段。其值来自正确的jsp文件。并使用ServletContextAware接口使用 contex.setAttribute如下所示。 1) 情景1 public class Search extends ActionSupport implements ServletContextAware { private String fromDate; public String getFromDate() { return

其中一个action类具有以下fromDate字段。其值来自正确的jsp文件。并使用ServletContextAware接口使用 contex.setAttribute如下所示。 1) 情景1

public class Search extends ActionSupport implements ServletContextAware {
    private String fromDate;
    public String getFromDate() {
        return fromDate;
    }
    public void setFromDate(String fromDate) {
        this.fromDate = fromDate;
    }
}

@Override
public void setServletContext(ServletContext ctx) {
    ctx.setAttribute("startDate", getFromDate());   
}
现在,在execute方法中的某个其他action类中,我获取其值,如下所示

public String execute() {
    ServletContext context = ServletActionContext.getServletContext();
    String obj = (String)context.getAttribute("startDate");
public String execute() {
    ServletContext context = ServletActionContext.getServletContext();
    String obj = (String)context.getAttribute("startDate");
obj值显示为空

在第一个action类中设置上下文变量时,如下所示

2)Scenario-2
    public class Search extends ActionSupport implements ServletContextAware {
        private String fromDate;
        public String getFromDate() {
            return fromDate;
        }
        public void setFromDate(String fromDate) {
            this.fromDate = fromDate;
        }

    @Override
    public void setServletContext(ServletContext ctx) {
        ctx.setAttribute("startDate", "Test message");  
    }
}
现在,在execute方法中的某个其他action类中,我获取其值,如下所示

public String execute() {
    ServletContext context = ServletActionContext.getServletContext();
    String obj = (String)context.getAttribute("startDate");
public String execute() {
    ServletContext context = ServletActionContext.getServletContext();
    String obj = (String)context.getAttribute("startDate");
obj值显示“测试消息”,这是正确的

我需要在ctx.setAttribute中传递动态的“private String fromDate”,该属性来自第一个场景中提到的jsp

我的要求是我可以在第一个action类中设置变量(fromDate)。在任何其他动作类中,我都需要使用这个变量。
请帮帮我。提前谢谢你。

正如戴夫已经提到的,你做这件事的顺序不对。在上下文中设置属性的时间fromDate为null,因为它是在该时间之后设置的

与其在setServletContext(…)中设置属性,为什么不在actions的execute方法中设置它呢

public String execute(){
    ServletActionContext.getServletContext().setAttribute("startDate", getFromDate());
}

然后您可以在第二个操作中使用它。

您的操作顺序错误,但最终取决于将首先调用的拦截器的顺序、参数集或上下文集。