私はレコードのデータテーブルを扱っています。私は、行をインライン(ごみ箱と編集アイコンの列)で削除して編集できるようにしたいと考えています。ユーザーが削除したいときは、クライアント側のカスタム確認が必要です。 [はい]をクリックすると、サーバーに送信してその行を削除します。XPages/JSFで確認メッセージクライアント側のDataTable行を削除する
私は<datatable />
のコンテキストでいますので、私は、このような確認せずにこの作業を持っている:
<xp:button styleClass="btn red"
value="Delete"
id="btnConfirmDelete">
<xp:eventHandler event="onclick"
submit="true"
refreshMode="partial"
refreshId="dataTable"
disableValidators="true">
<xp:this.parameters>
<xp:parameter name="rowIndex"
value="#{rowIndex}">
</xp:parameter>
</xp:this.parameters>
<xp:this.actionListeners>
<xp:actionListener type="com.domain.thing.listeners.deleteItemListener">
</xp:actionListener>
</xp:this.actionListeners>
</xp:eventHandler>
</xp:button>
このボタンはリピートパネルです。各行インデックスは、EL "#{rowIndex}"
によって適用されています。
素晴らしいです。
今、カスタム確認メッセージを導入する必要があります。
そこで、このボタンを<a />
に置き換えて、削除ダイアログボックスを起動して、既に作業中の削除ボタンをダイアログボックスに移動しました。問題は今、私は"#{rowIndex}"
を失ってしまったのですか?代わりにカスタムプロパティを使用して値をDOMに設定します。
問題は、paramsを通じてリスナーcom.domain.thing.listeners.deleteItemListenerでこの値を取得していることです。
私はこのようなコードを調整する:私は、ダイアログの発売によって設定されたrowIndexプロパティを取得ONSTART
<xp:eventHandler event="onclick"
submit="true"
refreshMode="partial"
refreshId="demurrageDataTable"
onStart="XSP.setSubmitValue(window.dataTableRowDelete); alert('row is ' + XSP.getSubmitValue());"
onError="alert('onError: There was an error with the request.');"
disableValidators="true">
<xp:this.parameters>
<xp:parameter name="rowIndex"
value="#javascript:context.getSubmittedValue();}">
</xp:parameter>
</xp:this.parameters>
<xp:this.actionListeners>
<xp:actionListener type="com.canalbarge.trak.listeners.deleteDemurrageItemListener">
</xp:actionListener>
</xp:this.actionListeners>
</xp:eventHandler>
。 アラートが発生すると、正しいrowIndexが表示されます。
p.getValue()は常に空の文字列 ""であるため、イベントリスナーのサーバー側に例外があります。ダイアログを閉じたときに、行のサーバー側に作用するダイアログを起動繰り返しでボタン、 - - で、繰り返しの要素への参照を格納することでこの種のもののために私の典型的なアプローチは
XspEventHandler eventHandler = (XspEventHandler) event.getSource();
List<Parameter> params = eventHandler.getParameters();
System.out.println(btnName + "checking event params");
if(params != null){
for (Parameter p : params) {
System.out.println(btnName + p.getName() + "," + p.getValue());
if(p.getName().equals("rowIndex")){
rowIndex = Integer.parseInt(p.getValue());
}
}
}
else{
System.out.println(btnName + "params is null.");
}
私は提出された価値の利用可能性について私の質問に答えているのか分かりませんが、回避策があります。カスタム確認ダイアログを表示するためのデータ行のタグをコンポーネントタグ に変換し、XSP.setSubmitValue(#{rowIndex});をクリックして送信された値を設定します。ダイアログボックスのボタンのsetSubmittedValue javascriptを削除します。 actionListenerが送信できるようにします。アクションリスナーのパラメータはvalue = "#{javascript:context.getSubmittedValue();}"です。この値は、actionListenerのparamsマップに格納されます。 –
xpagesbeast
@Peter Mortensen、編集に感謝します。 – xpagesbeast