リクエスト値の適用フェーズでは、コンポーネント ツリー内decode()のすべてのインスタンスのメソッドが実行されます。UIComponentここで、必要な HTTP 要求パラメーターがチェックされ、収集されます。UIInputコンポーネント (およびフレンド) の場合<h:inputText>、送信された値が取得されています。UICommandコンポーネント (<h:commandButton>およびフレンド) の場合、はActionEventキューに入れられています。
<p:commandButton>すべての魔法が発生した場合、ソース コードCommandButtonRenderer#decode()の関連部分が以下に抽出されます (行番号は PrimeFaces 3.5 のものです)。
34  public void decode(FacesContext context, UIComponent component) {
35      CommandButton button = (CommandButton) component;
36      if(button.isDisabled()) {
37          return;
38      }
39         
40      String param = component.getClientId(context);
41      if(context.getExternalContext().getRequestParameterMap().containsKey(param)) {
42          component.queueEvent(new ActionEvent(component));
43      }
44  }
基本的な HTMLに精通している場合はname=value、すべての入力要素のペアと、それを囲むフォームの押されたボタンのみが要求パラメーターとしてサーバーに送信されることを既に知っているはずです。PrimeFaces コマンド ボタンは、基本的に次の HTML を生成します。
<button type="submit" name="formId:buttonId" ... />
どこformId:buttonIdから印刷されUIComponent#getClientId()ます。HTTP 要求パラメーター名として使用されているのはまさにこの値です (HTTP 要求パラメーター値はボタンのラベルですが、ここではそれ以上関係ありません)。JSF がその上で実行される基本的な サーブレットに精通している場合は、ボタンHttpServletRequest#getParameter()のペアを含めて、によってリクエスト パラメータが利用可能であることも既に知っているはずです。name=valueこれにより、押されたボタンを区別できます。
上記のdecode()方法でわかるように、このUIComponent#getClientId()値は、HTTP 要求パラメーター マップにパラメーター名が含まれているかどうかを確認するためにも使用されています。その場合、ActionEvent最終的にはアプリケーションの呼び出し段階で呼び出されるキューに入れられます。
EL の議論に関しては、実際にはロケット科学ではありません。EL式全体は、アプリケーションの呼び出し段階で実行されます。フォームの HTML 出力の生成中に実行され、何らかの方法でリクエスト パラメータとして渡されるわけではありません。いいえ、実際のアプリケーションの呼び出し段階で実行されただけです。