在Struts 2中对服务器的调用之间保存数据

时间:2014-01-05 15:47:37

标签: java javascript jsp session struts2

我有一个Action课程,如下所示:

public XyzAction extends ActionSupport{

public String method1(){
  // Get the Map by calling a stateless Session bean
  Map m = remoteInterface.getMap();   
}


public String method2(){

}
}

现在调用Action映射到method1并填充我的地图,并使用Map值填充我的下拉列表 JSP。

现在在JSP用户中单击一个提交按钮,调用Action映射到method2,其中从DB检索一些数据,同一个JSP必须在{{1}中显示数据我还需要显示之前的下拉列表

那么如何保存Map以便即使在第二次调用服务器后也可以显示? 我应该将它存储在会话中并在我的JSP中检索,如:

div

或者我们还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

您可以使用范围将bean绑定到完整会话 “会话”。

所以只需使用此范围声明一个bean,struts就会生成一个这样的实例 整个会话的bean。您可以在多个请求中使用此bean。

这个bean是存储整个网络会话期间所需变量的好地方。

答案 1 :(得分:0)

要通过OGNL表达式"#session.map"从会话中获取值,您需要更改代码,所以

public String method1(){
  // Get the Map by calling a stateless Session bean
  Map m = remoteInterface.getMap(); 
  Map session = ActionContext.getContext().getSession(); 
  session.put("map", m);
  return SUCCESS; 
}

method2中,您必须检查值是否可用

public String method2(){
  Map session = ActionContext.getContext().getSession();
  if (session.get("map") == null){
    addActionError("map is null");
    return ERROR;
  }  
  return SUCCESS; 
}

如果您看到从动作上下文获取会话映射的代码正在重复,那么为什么最好将会话映射注入action属性。通过实现SessionAware接口,这是另一种更好的方式来将会话映射到您的操作。