我有一个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
或者我们还有其他选择吗?
答案 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
接口,这是另一种更好的方式来将会话映射到您的操作。