其中一个操作类具有 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)。在任何其他动作类中,我需要使用该变量。 请帮我。谢谢你提前。
答案 0 :(得分:1)
正如戴夫已经提到过的,你是按错误顺序做的。在上下文中设置属性的时间,fromDate为null,因为它在此之后设置。
不是在setServletContext(...)中设置属性,为什么不在action的execute方法中设置它呢?
public String execute(){
ServletActionContext.getServletContext().setAttribute("startDate", getFromDate());
}
然后你可以在第二个动作中使用它。