Struts2 ServletActionContext.getServletContext返回null
其中一个action类具有以下fromDate字段。其值来自正确的jsp文件。并使用ServletContextAware接口使用 contex.setAttribute如下所示。 1) 情景1Struts2 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
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());
}
然后您可以在第二个操作中使用它。您的操作顺序错误,但最终取决于将首先调用的拦截器的顺序、参数集或上下文集。