-1

其中一个动作类具有以下fromDate字段。其值来自正确的 jsp 文件。并使用 ServletContextAware 接口使用 contex.setAttribute 设置 fromDate 值,如下所示。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());   
}

现在在执行方法中的其他一些动作类中,我正在获取它的值,如下所示。

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

obj 值显示为空。

在第一个动作类中设置上下文变量如下

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");  
    }
}

现在在执行方法中的其他一些动作类中,我正在获取它的值,如下所示。

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

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

我需要在 ctx.setAttribute 中传递来自 jsp 的动态“私有字符串 fromDate”,如第一个场景中所述。

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

4

1 回答 1

1

正如戴夫已经提到的那样,您的操作顺序错误。在上下文中设置属性的时间,fromDate 为空,因为它是在那之后设置的。

与其在 setServletContext(...) 中设置属性,不如在操作的执行方法中设置它!

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

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

于 2013-10-29T02:35:08.300 回答