2017-01-05 4 views
0

私はレコードのデータテーブルを扱っています。私は、行をインライン(ごみ箱と編集アイコンの列)で削除して編集できるようにしたいと考えています。ユーザーが削除したいときは、クライアント側のカスタム確認が必要です。 [はい]をクリックすると、サーバーに送信してその行を削除します。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."); 
} 

答えて

1

viewScope変数。それをxp:inputHiddenに渡すことも可能で、CSJSで実行できる可能性があるので、SSJSを使用してダイアログを起動しないでください。

0

削除イベントのクライアントサイドスクリプトをreturn confirm("Are you sure?");で定義します。ユーザーが[はい]をクリックした場合にのみSSJSスクリプトが実行されます。

+0

ブラウザの確認機能は使用できません。私はカスタムダイアログボックスを使用する必要があります。 – xpagesbeast

0

解決策は私のコメントです。行編集アイコンをクリックするときに、rowIndexを設定する必要があります。私の場合は、提出されたバリュー変数を使用しています。 Paul Stephans Withersが示すように、Scoped Variablesのいずれかを使用することができます。いずれの場合も、アプリケーションのマップ変数の1つにrowIndexを保存し、ダイアログが実行されたら、この変数値を使用する必要があります。

関連する問題