Primefaces 4 では pickList には転送イベントのみがあり、選択/選択解除イベントは Primefaces 5.2 で追加されました。
ドキュメントから:
Ajax 動作イベント
PickList は、アイテムが 1 つのリストから別のリストに移動されたときに発生する、デフォルトで唯一の ajax 動作イベントとして transfer を提供します。以下の例は、このイベントの使用方法を示しています。
<p:pickList value="#{pickListBean.cities}" var="city"
itemLabel="#{city}" itemValue="#{city}">
<p:ajax event="transfer" listener="#{pickListBean.handleTransfer}" />
</p:pickList>
public class PickListBean {
//DualListModel code
public void handleTransfer(TransferEvent event) {
//event.getItems() : List of items transferred
//event.isAdd() : Is transfer from source to target
//event.isRemove() : Is transfer from target to source
}
}
アップデート:
選択/選択解除イベントをキャッチするには、チェックボックスのクリックイベントにバインドできます
<p:pickList widgetVar="pick" showCheckbox="true" id="pickList" value="#{ctrl.elts}" var="elt" itemLabel="#{elt}" itemValue="#{elts}" >
<f:facet name="sourceCaption">A</f:facet>
<f:facet name="targetCaption">B</f:facet>
</p:pickList>
<script>
$(function(){
PF('pick').checkboxes.each(function(){
$(this).bind("click", function(){
var checked = $(this).find("> span.ui-icon-check").length > 0
if ( checked ){
alert('checked');
} else {
alert('unchecked');
}
});
});
});
</script>
次に、Bean リスナーを呼び出す必要がある場合は、2 つの remoteCommands を追加して、クリック コールバックで関数を呼び出すことができます。
<p:pickList widgetVar="pick" showCheckbox="true" id="pickList" value="#{ctrl.elts}" var="elt" itemLabel="#{elt}" itemValue="#{elts}" >
<f:facet name="sourceCaption">A</f:facet>
<f:facet name="targetCaption">B</f:facet>
</p:pickList>
<p:remoteCommand name="select" actionListener="#{ctrl.select}" />
<p:remoteCommand name="unselect" actionListener="#{ctrl.onUnselect}" />
<script>
$(function(){
PF('pick').checkboxes.each(function(){
$(this).bind("click", function(){
var checked = $(this).find("> span.ui-icon-check").length > 0
if ( checked ){
select();
} else {
unselect();
}
});
});
});
</script>
明らかに、リスナーは SelectEvent/UnselectEvent を受け入れることができませんが、remoteCommand を使用すると、必要に応じてパラメーターを渡すことができます。
JavaScript から p:remoteCommand にパラメーターを渡す