2

「 JSF 2 GETs Bookmarkable URLs」というタイトルの記事を読んでいました。

記事には次の段落があります。

ビュー パラメーター
の概要 API ドキュメントでは、javax.faces.component.UIViewParameter コンポーネント クラスで表されるビュー パラメーターを、要求パラメーターとモデル プロパティ間の宣言型バインディングとして説明しています。モデル プロパティへのバインドは、EL 値の式 (#{blog.entryId} など) を使用して表現されます。式が省略された場合、リクエスト パラメータは代わりに同じ名前のリクエスト スコープの変数にバインドされます。

リクエストスコープ変数の例を教えてください。

4

4 に答える 4

4

「リクエストスコープ変数」は、の属性として格納される変数ですHttpServletRequest

request.setAttribute("foo", foo);

この属性は、ELで通常の方法で使用できます#{foo}。それHttpServletRequest自体の存続期間は、正確に1つのHTTP要求/応答サイクルです。HTTPリクエストに関連付けられたHTTP応答がクライアント(Webブラウザー)に完全に到着すると、HttpServletRequestそのすべての属性を含むインスタンスはガベージされます。ちなみに、JSFリクエストスコープのマネージドBeanは、の属性としても保存されますHttpServletRequest

JSFは基本HTTPサーブレットAPIの「上」で実行されるため、HTTPとサーブレットAPIの動作も理解していれば、これはすべて理解しやすくなります。この答えは、いくつかの啓蒙を与えるかもしれません:サーブレットはどのように機能しますか?インスタンス化、セッション、共有変数、マルチスレッド


その後の質問は、おそらく「これは引用された段落とどのように関連していますか?」です。さて、基本的には、のvalue属性を省略する<f:viewParam>と、代わりにリクエストスコープに変数として配置されることを示しています。

だから、あなたが使用する場合

<f:viewParam name="entryId" />

それ以外の

<f:viewParam name="entryId" value="#{blog.entryId}" />

その後#{entryId}、リクエストスコープのように利用可能になります。

<p>The entry ID view parameter is: #{entryId}</p>

ただし、これはビューパラメータが通常使用される方法ではありません。#{param}あるいは、代わりにマップを使用しただけで、全体が<f:viewParam>不要になります。

<p>The entry ID view parameter is: #{param.entryId}</p>

参照:

于 2012-09-17T11:41:05.047 に答える
0

id は、マネージド Bean 構成の entryId にマップされるか、注釈を使用できます。

<managed-bean>
   <managed-bean-name>blog</managed-bean-name>
   <managed-bean-class>com.acme.Blog</managed-bean-class>
   <managed-property>
     <property-name>entryId</property-name>
      <value>#{param['id']}</value>
   </managed-property>
</managed-bean>

@RequestScope: (これはマネージド Bean のデフォルトのスコープです)。これにより、Bean がリクエスト スコープに配置されます。HTTP リクエストごとに新しいインスタンスを作成します。通常、Bean は 2 回インスタンス化されます。1 回はフォームの表示時、もう 1 回はフォームの送信時です。

于 2012-09-17T09:00:54.990 に答える
0

リクエスト スコープの変数は、単一のリクエストごとにインスタンス化されます。したがって、リクエスト スコープの変数インスタンスは、別のリクエストのコンテキストには存在しません。

于 2012-09-17T08:45:47.077 に答える
0

リクエスト スコープ変数は、その名前が示すように、現在の http リクエストでのみ有効です。リクエスト変数は、リクエストをサーブレットから jsp に転送するときに使用すると便利です。たとえば、サーブレットで変数を設定し、後で ${myvar} を使用して jsp で同じ変数を読み取ります。

例(サーブレット)

request.setAttribute ("greeting", "world");        
getServletConfig().getServletContext().getRequestDispatcher("/jsp/page.jsp").forward(request, response);

例(jsp)

こんにちは ${greeting}

于 2012-09-17T08:46:26.567 に答える