如何在 Struts 2 中维护动作变量的值?

问题描述 投票:0回答:1
class SampleAction extends ActionSupport {
private Map<String,String> circleIdNameMap;

public String preprocess(){
--logic for populating value of MAP
}
--getters and setters
}

现在,我的问题是在页面加载上,我调用

preprocess
函数并填充
Map
的值。页面提交后,会调用另一个方法,期间经过一些数据库交互后,重定向到 JSP,但这次
Map
的值为空。我在 Struts 2 中使用这个
Map
作为下拉标签。

我的

preprocess
在链接中关联,例如:

href="/gma/preprocessConfigureTspThreshold?operatorId=5102&sessionId=12332"‌`​

因此,只有第一次单击链接时才会调用

preprocess
,之后,当我重定向到我的 JSP 时,因此不会调用它,所以第二次
Map
的值为空。

  1. 我应该将地图放入会话中以便保留它吗?或者可以做点别的吗?

  2. 我读到不要使用

    preprocess
    功能,使用
    Preparable
    界面。但根据文档:

    prepare方法总是会被Struts 2框架的prepare拦截器调用

每当 Action 类调用任何方法时。

因此,每个方法都会调用它。我希望仅在页面加载时调用

preprocess

java jsp struts2 url-parameters
1个回答
1
投票

prepare
操作类的
Preparable
方法在每个操作执行时都会被调用,没错。这可能就是您在
preprocess
方法中为下拉菜单准备地图的原因。

public class SampleAction extends ActionSupport {
    private Map<String,String> circleIdNameMap;
    private String circleId;
    //getters and setters here

    protected boolean reload = false;

    private void preprocess(){
      // Get the Map by calling a stateless Session bean
      circleIdNameMap = remoteInterface.getMap(); 
    }

    public String action1(){
      preprocess();
      Map session = ActionContext.getContext().getSession(); 
      session.put("circleIdNameMap ", circleIdNameMap );
      return SUCCESS; 
    }

    public String action2(){
      Map session = ActionContext.getContext().getSession();
      circleIdNameMap = (Map<String,String>)session.get("circleIdNameMap"); 
      if (circleIdNameMap == null){
        if (reload) {
          preprocess();
          Map session = ActionContext.getContext().getSession(); 
          session.put("circleIdNameMap ", circleIdNameMap );
        } else {
          addActionError("circleIdNameMap is null");
          return ERROR;
        }
      }  
      return SUCCESS; 
    }

   ...//other actions
}

下拉JSP

<s:select name="circleId" list="circleIdNameMap" listKey="key" listValue="value"/>

此代码的含义是:如果 JSP 中的字段未初始化,则不应返回结果

SUCCESS
INPUT

© www.soinside.com 2019 - 2024. All rights reserved.