ServletActionContext.getServletContext返回null

时间:2013-10-28 20:08:14

标签: struts2

其中一个操作类具有 fromDate 字段。其值来自jsp文件,这是正确的。并使用ServletContextAware接口设置fromDate值 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方法中的其他一些动作类中,我按如下方式获取其值。

public String execute() {
    ServletContext context = ServletActionContext.getServletContext();
    String obj = (String)context.getAttribute("startDate");

obj值显示为null。

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

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方法中的其他一些动作类中,我按如下方式获取其值。

public String execute() {
    ServletContext context = ServletActionContext.getServletContext();
    String obj = (String)context.getAttribute("startDate");

obj值显示“测试消息”,这是正确的

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

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

1 个答案:

答案 0 :(得分:1)

正如戴夫已经提到过的,你是按错误顺序做的。在上下文中设置属性的时间,fromDate为null,因为它在此之后设置。

不是在setServletContext(...)中设置属性,为什么不在action的execute方法中设置它呢?

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

然后你可以在第二个动作中使用它。