【问题标题】:Save data between calls to the server in Struts 2在 Struts 2 中对服务器的调用之间保存数据
【发布时间】:2014-01-23 00:08:53
【问题描述】:

我有一个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 被填充,我使用 Map 值填充我的 JSP 中的 下拉

现在在 JSP 中,用户单击提交按钮并调用 Action,它映射到 method2,其中一些数据从 DB 中检索,并且同一个 JSP 必须在 div 中显示数据,我还需要显示上一个下拉菜单

那么如何保存地图,以便在第二次调用服务器后仍能显示? 我应该将它存储在会话中并在我的 JSP 中检索,例如:

<s:select name="#session.map" />

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

【问题讨论】:

    标签: java javascript jsp session struts2


    【解决方案1】:

    您可以使用作用域将 bean 绑定到完整的会话 “会议”。

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

    此 bean 将是存储整个 Web 会话期间所需的变量的好地方。

    【讨论】:

    【解决方案2】:

    要通过 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; 
    }
    

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

    【讨论】:

    • 我知道 SessionAware 以及如何将变量放入会话中。基本上我想问的是,如果我们希望在第二次服务器调用中使用它,那么将变量保留在会话范围内是唯一可用的选项吗?因为我觉得只有像 userId 这样的东西才能保留在会话中。我错了吗?
    • 您可以在请求之间的参数中保留 userId 之类的内容(即隐藏字段的用途),但如果您想保留一个集合并希望在会话中保存它,那么您可以选择利用会话映射、拦截器、容器或 servlet。您也可以保存在 cookie 中。
    • 所以要在第二个服务器调用中保留一个变量,我唯一的选择是将它保留在会话范围内(通过会话映射、拦截器、容器或 servlet)???跨度>
    • 这是参考我的问题的第一部分; stackoverflow.com/questions/20944860/…
    • 我没听清你是想在第一次操作调用中保留地图值,还是想在第二次操作中重新加载它?另外,忘记告诉您可以在操作中保留的地图值的引用,会话中的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多