process
タグの属性を指定するp:ajax
とリスナーが実行されません。属性を省略した場合process
、リスナーは期待どおりに呼び出されます。
ビューのスニペットは次のとおりです。
<p:messages id="messages" />
<h:inputText id="inputToProcess" value="#{controller.inputToProcess}" />
<p:selectBooleanCheckbox id="testCheckbox" >
<p:ajax event="change" process="inputToProcess"
update="messages @this inputToUpdate"
listener="#{controller.processChecked}" />
</p:selectBooleanCheckbox>
<h:inputText id="inputToUpdate" value="#{controller.inputToUpdate}" />
そしてコントローラー:
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class Controller implements Serializable {
private String inputToProcess;
private String inputToUpdate;
//getters and setters
public void processChecked(javax.faces.AjaxBehaviorEvent e) {
// doing some stuff here
}
}
PhaseIdphaseListener
を使用してビューに を添付しました。これが私が観察したものです。ANY_PHASE
process
attributeを指定すると、モデルの更新フェーズ中にinputToProcess入力の値がコントローラーに正常に設定されます (例外は発生しません)。次にフェーズInvoke Application
とRender Response
フェーズが実行されますが、リスナーは呼び出されません。私が気づいたことの1つは、最後にチェックボックスが設定されていないことです。Update Model
しかし、前述したようにフェーズとInvoke Application
フェーズが実行されるため、変換エラーや検証エラーはありません。
属性を省略した場合process
、次のように表示されます。リスナーは通常、Invoke Application
フェーズ中に呼び出され (immediate
デフォルトでは false であるため)、その後 `Render Response が実行されます。チェックボックスが正常に設定されました。
この種の動作について何か説明はありますか?