0

我有 ModelBean(假设是 MyBean),我在其中设置大量来自数据库的数据

class MyBean{
   List<String> someData;
   //getters and setters and other properties
}

现在我在 jsp 中显示这些数据。到现在为止都很好。

现在,当我从 JSP 提交任何操作时,一旦 Flow 进入 Action 类,除了使用隐藏变量再次提交的参数外,ModelBean 数据丢失了。我知道如果我们仅出于查看目的显示数据,我们需要使用隐藏变量提交它们以便将它们保留在 bean 中。

由于我有大量来自 db 的数据,我不想将它们隐藏起来并让我的 jsp 加载速度非常慢。在不使用会话/隐藏的情况下保持数据从模型 bean 流向 jsp 再到模型 bean 的任何其他解决方法。我对请求参数很好。

4

1 回答 1

2

您想要的行为没有干净的替代方案。从本质上讲,HTTP 是一个无状态协议,为了存储状态,例如你的 modelBean,你将不得不将它放在会话中,或者通过请求参数将整个 bean 传递给下一个操作(通常通过表单)。现在,你不想两者都做,所以你能做的很少。

你真的更新了你放在你的modelBean中的所有信息吗?如果您只是将 bean ID 放在隐藏字段中,那么当您将其传递给下一个操作时,从数据库中检索 bean 并使用它做您想做的事情。这样,您的状态将存储在数据库中,您无需在 JSP 中传递这个巨大的对象。

现在,如果你真的想传递整个对象,并且你正在寻找第三种选择,我能想到的最好的方法是使用GSON之类的东西将对象转换为 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);

但是......这几乎与将对象放在隐藏字段中相同。

TL;DR 如果您真的不需要传递整个 beanObject,请考虑在下一步操作中仅传递 bean 的 ID 并从数据库中检索它。

于 2012-09-25T09:24:32.653 回答