0

私が理解するのを手伝ってください、

<h:form>
  <h:panelGrid columns="3">
    <h:outputText value="Age:"/>
    <h:inputText value="#{userBean.age}" size="4"/>
    <a4j:commandButton value="Enter Age" reRender="age"/>
  </h:panelGrid>
  <h:panelGrid>
    <h:outputText id="age" value="Your age: #{userBean.age}"/>
  </h:panelGrid>
</h:form>

commandButtonがクリックされたときに、セッターを呼び出すBeanをどのように評価するか。入力領域内で使用されているBeanから参照されていますか?

ありがとう

4

1 に答える 1

8

コマンドボタンはそれを行いません。コマンドボタンは、アクションを呼び出す必要があるかどうか、および呼び出す必要がある場合はどのメソッドであるかを判断するだけです。各入力コンポーネントは、独自の値を設定します。実際のジョブは、コンポーネントに関連付けられているdecode()メソッドで実行されます。Rendererリクエスト値の適用フェーズでは、JSFはすべてUIFormのコンポーネントをウォークスルーUIInputします。UICommandそれらのそれぞれは、最初に、要求パラメーター名として独自のクライアントIDによって要求パラメーター値を取得します。

String value = request.getParameter(input.getClientId(context));

requestここHttpServletRequestにあり、ここにinputありますUIInput

次に、必要に応じて変換と検証のプロセスを実行した後、最終的には独自のvalue属性によって参照されるBeanプロパティとして設定されます。

input.getValueExpression("value").setValue(context.getElContext(), value);

は、BeanValueExpression#setValue()を評価し#{userBean.age}、スコープにまだ存在しない場合はBeanを自動作成してsetAge()から、渡された値を使用してBeanのメソッドを呼び出します。

これはすべて、 JSF仕様で詳細に説明されています。

于 2012-05-29T05:59:42.323 に答える