维护行动变量的值?
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
值为空。
-
我应该将地图放在会话中以便保留吗? 或者可以做点什么?
-
我读过不使用
preprocess
function,使用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中的字段未初始化,则不应返回结果SUCCESS
或INPUT
。