从jsp保存Struts2 ModelBean数据

从jsp保存Struts2 ModelBean数据,model,struts2,request,javabeans,Model,Struts2,Request,Javabeans,我有一个ModelBean(假设是MyBean),在这里我从数据库中设置了很多数据 class MyBean{ List<String> someData; //getters and setters and other properties } 类MyBean{ 列出一些数据; //getter和setter以及其他属性 } 现在我用jsp显示这些数据。到目前为止一切都很好 现在,当我从JSP提交任何操作时,一旦流进入操作类,ModelBean数据就会丢失,除了使用

我有一个ModelBean(假设是MyBean),在这里我从数据库中设置了很多数据

class MyBean{
   List<String> someData;
   //getters and setters and other properties
}
类MyBean{
列出一些数据;
//getter和setter以及其他属性
}
现在我用jsp显示这些数据。到目前为止一切都很好

现在,当我从JSP提交任何操作时,一旦流进入操作类,ModelBean数据就会丢失,除了使用隐藏变量提交的参数之外。我知道如果我们只是为了查看而显示数据,我们需要使用隐藏变量提交它们,以便将它们保存在bean中


由于我有如此多的数据来自数据库,我不想把它们隐藏起来,使我的jsp加载非常缓慢。保持数据从模型bean到jsp再到模型bean流动而不使用session/hidden的任何其他解决方法。我对请求参数很满意。

除了您想要的行为之外,没有其他干净的选择。从本质上讲,HTTP是一种无状态协议,为了存储状态,例如,您的modelBean,您必须将其放入会话中,或者通过请求参数(通常通过表单)将整个bean传递给下一个操作。现在,你不想同时做这两件事,所以你能做的就很少了

您是否真的更新了所有放置在modelBean中的信息?如果您只是将bean ID放在一个隐藏字段中,那么当您将其传递给下一个操作时,从DB中检索bean并对其执行您想要的操作。这样,您的状态存储在数据库中,不需要在JSP中传递这个巨大的对象

现在,如果您真的想传递整个对象,并且您正在寻找第三种选择,那么我能想到的最好方法是使用类似的方法将对象转换为json对象,然后在JSP上将其传递为javascript对象,例如:

//Java code
String modelBeanJson = GSON.toJson(modelBean, ModelBean.class);

//JS code
var jsonToPass = <s:property value="modelBeanJson" escape="false" />;
//On next action
window.location.href = "NextAction?param1=" + JSON.stringify(jsonToPass);
//Java代码
字符串modelBeanJson=GSON.toJson(modelBean,modelBean.class);
//JS代码
var jsonToPass=;
//下一步行动
window.location.href=“NextAction?param1=“+JSON.stringify(jsonToPass));
但是。。。这与将对象放入隐藏字段几乎相同

TL;如果你真的不需要传递整个Bean对象,考虑只传递bean的ID并在下一个动作中从DB中检索它。< /强>