维护行动变量的值?

class SampleAction extends ActionSupport { private Map circleIdNameMap; public String preprocess(){ --logic for populating value of MAP } --getters and setters } 

现在我的问题是页面加载我调用preprocess函数并填充Map的值。 在页面提交之后调用另一个方法,在此之后,在一些数据库交互之后,它会重定向到JSP,但这次Map值为空。 我在Struts2中使用这个Map for drop-down标签。

我的preprocess在链接中关联,如:

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

因此,只有在第一次单击链接时才会调用preprocess ,之后当我重定向到我的JSP时,因此它不被调用,所以第二次Map值为空。

  1. 我应该将地图放在会话中以便保留吗? 或者可以做点什么?

  2. 我读过不使用preprocessfunction,使用Preparable接口。 但按照文档:

    struts 2框架的准备拦截器将始终调用prepare方法
    每当为Action类调用任何方法时。

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

每次执行动作时都会调用Preparable动作类的prepare方法,这是正确的。 这可能是您为preprocess方法中的下拉列表准备地图的原因。

 public class SampleAction extends ActionSupport { private Map 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)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

  

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