1

を使用してセッション スコープのプロパティを変更することは可能ognlですか?

たとえば、自分のセッションに、属性PROCESS_CONFIGを持つオブジェクトであるという属性がある場合、JSP でnameこの属性を変更するにはどうすればよいでしょうか。name

私は次のことを試しましたが、うまくいきません:

<s:textfield value="%{#session.PROCESS_CONFIG.name}" id="PROCESSNAME" name="#session.PROCESS_CONFIG.name"/> 

フォームを送信し、アクションでセッション オブジェクトにアクセスするとServletActionContext.getRequest().getSession().getAttribute("PROCESS_CONFIG")、属性nameは変更されません。

編集:

としてセッションに保存されたオブジェクトは、非常に複雑なオブジェクト (オブジェクトのリストのリストを持つ他のオブジェクトへの多数の参照によって構成される) であり、私の見解では、その属性の非常に小さなサブセット(その属性を含む)PROCESS_CONFIGを提示したいだけです。構成されたオブジェクト)。したがって、他のすべてのフィールドを非表示として JSP を汚染することは実際的ではありません。問題のビューは、これらのフィールドの値を変更できるフォームです。オブジェクトがアクションのプロパティであるかのように、Struts 2 セッションに保存されたオブジェクトを直接かつ自動的に更新したいと考えています。たとえば、前のコード スニペットの場合、はオブジェクトの属性であり、オブジェクトを使用する代わりにオブジェクト で自動的に更新したいと考えています。PROCESS_CONFIGPROCESS_CONFIGPROCESSNAMEPROCESS_CONFIGPROCESS_CONFIGPROCESSNAMEアクションのプロパティでありPROCESSNAMEPROCESS_CONFIGオブジェクトの設定を明示的に行う必要があります。

4

1 に答える 1

1

S2 のセッションは、JSP の OGNL で使用する前に属性を配置できるマップです。これを回避するには、アクションを実装SessionAwareし、公式サイトで説明と使用法を確認し、FAQ からセッションにアクセスするにはどうすればよいかを読んでください。

あなたの質問に対して: JSP で属性を取得しなかったのはなぜですか。S2 と OGNL を使用して (#session参照経由で) 取得しており、属性を S2 セッションに配置していないためです。S2 セッションの実装は、標準の http セッションとは異なります。ただし、属性を標準の http セッションに設定すると、JSP 2.0 の方法でアクセスできます。その逆もまた真です。

于 2013-02-01T17:18:10.347 に答える