0

データベースから多くのデータを設定しているModelBean(MyBeanと仮定)があります

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

今、このデータをjspで表示しています。ここまでは大丈夫です。

JSP からアクションを送信すると、Flow が Action クラスに入ると、隠し変数などを使用して再度送信されたパラメーターとは別に、ModelBean データが欠落しています。表示のみを目的としてデータを表示している場合は、Bean に保持するために隠し変数を使用して送信する必要があることを認識しています。

私はデータベースから大量のデータを取得しているため、それらを非表示にして jsp の読み込みを非常に遅くしたくありません。session/hidden を使用せずに、モデル Bean から JSP、モデル Bean へのデータの流れを維持するためのその他の回避策。リクエストパラメーターで問題ありません。

4

1 に答える 1

2

あなたが望む振る舞いに代わるクリーンな方法はありません。本質的に、HTTPはステートレスプロトコルであり、たとえばmodelBeanなどの状態を格納するには、HTTPをセッションに配置するか、リクエストパラメータを介してBean全体を次のアクションに渡す必要があります(通常はフォーム)。さて、あなたは両方をやりたくないので、他にできることはほとんどありません。

modelBeanに配置しているすべての情報を実際に更新しますか?Bean IDを非表示フィールドに配置し、それを次のアクションに渡すときに、DBからBeanを取得して、必要な処理を実行する場合はどうでしょうか。そうすれば、状態がDBに保存され、JSPでこの巨大なオブジェクトを渡す必要がなくなります。

オブジェクト全体を本当に渡したい場合で、3番目の選択肢を探している場合、私が考えることができる最善の方法は、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を渡し、DBから取得することを検討してください。

于 2012-09-25T09:24:32.653 に答える