0

いくつかの方法でプロパティを設定できValueStackます。

 ValueStack stack = ActionContext.getContext().getValueStack();
 stack.getContext().put("resultDTO",resultDTO);  //1. creates a different branch 
 //parallel to root

 stack.set("resultDTO", resultDTO); //2. pushes on root as a Map?
 stack.push(resultDTO); //3. pushes on root
 myActionClass.setProperty(); //4. normal action accessor

これらすべての値を JSP、freemarker、および Java のように取得できるようにする必要があります

 stack.findValue() or stack.findString().    

この4つの設定方法それぞれのライフサイクルについて知りたいです。アプリケーション全体ですか。ValueStackはリクエストごとに作成され、アプリケーションとセッションの値はリクエストごとに設定されていますか?

4番目の方法が最も一般的なアプローチであることは知っていますが、アクションクラスに簡単にアクセスできないすべての場所でそれを使用しているわけではありません.

JSP でのアクセスについて別の疑問があります

 <s:push value="resultDTO" ><s:property value="data.form1[0]" /></s:push>
 <!--5.works for context.put() & stack.set() both-->

 <s:property value="#resultDTO.data.form1[0].countryofissue" /> <!--6.context.put()-->
 <s:property value="resultDTO.data.form1[0].countryofissue" />  <!--7.stack.set()-->
 <s:property value="data.form1[0].countryofissue" />            <!--8.stack.push()-->

stack.getContex().put()また、 と の両方で5 番目のポイントがどのように機能するかを知りたいstack.set()です。私がアクセスしている6番目のresultDTOは別のルートであり、7番目ではデフォルトルートの子であるValueStackであることを理解しています。8 番目では、デフォルトのルートから検索を開始します。

http://struts.apache.org/2.0.11.1/docs/ognl.htmlhttp://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/utilを調べました/ValueStack.htmlとかなり混乱このリンクhttp://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL

これらすべてを言ったので、URLを?debug=browserstack.getContext().put()に設定することで値を明確に確認できるため、メソッドを使用する傾向はほとんどありません。私が間違っている場合は、私に助言してください。

4

1 に答える 1

0

ValueStackリクエストごとです。スタックに値を配置すると、リクエストの後半 (つまり、ビュー レイヤー) でアクセスできますが、リダイレクト後は存続せず、新しい HTTP リクエストとなり、独自のValueStack.

通常の状態では、URL またはフォーム ポストのパラメーターは、アクションのセッター メソッドを使用してアクションに設定されます。インターセプターでは、スタックに値を直接追加できます。たとえば、ExceptionMappingInterceptorstack.push(Object)メソッドを使用して、エラー ページで使用する例外を発行します。

  • stack.getContext().put(String, Object)-- スタック上に存在するマップにキー/値を配置します。マップは、スタックのコンテキストを表します。
  • stack.set(String, Object)-- スタック上に存在するマップにキー/値を配置します。これが以前の方法とどのように関連しているかはわかりませんが、マップが異なります。
  • stack.push(Object)-- これにより、オブジェクトがスタックのルートに配置されます。

ビューレイヤー内からスタックに何も配置する必要はないはずなので、それを必要とする何をしようとしているのか知りたいです。

于 2011-02-18T17:31:12.097 に答える