2012-03-28 5 views
1

データを表示するためのJSFページで、ソートと列の並べ替えを有効にしたデータテーブルが、適切なバッキングBeanプロパティ(sortColumnId、sortAscending、columnsOrder o:dataTable要素の属性)。対応するインライン編集ページ(カスタムコードを通して、テーブルの個々の行をユーザが一度に1つずつ保存することができます)では、データテーブルのcolumnsOrderは同じプロパティにリンクされているため、列はo:columnReordering要素は、編集ページの列の並び替えを防ぐためにデータテーブルに存在しません。パーシャルレスポンスXMLのエラーのために、列の移動によって開始されたAJAX呼び出しがテーブルを更新できないため、これが必要です。 (編集ページのAJAXを介してテーブルが更新されないようにするための他の要件もあります)ソートされたOpenFaces Datatableのソート順を変更する機能を無効にする

ビューと同じ順序でソートされた編集ページ上のデータテーブルを持たせたい並べ替えも無効になっています。しかし、これはOpenFacesでは可能ではないようです。編集ページのデータを同じバッキングBeanのプロパティにリンクしましたが、ソートされた列をソート済みとして表示するには、o:columnタグにsortingExpression属性が必要です。その属性が列に追加されると、その列は、ユーザーが列ヘッダーをクリックすることでソート可能になります。追加されない場合、列はユーザ​​ーによってソート可能ではありませんが、バッキングBeanのプロパティで並べ替える列として指定されていても、その列で並べ替えられません。

DOMが作成されたらJQueryで実行されるJavaScriptを使用して、OpenFaces列ヘッダーの 'th'要素でclickイベントによって呼び出された関数を上書きしようとしましたが、関数を呼び出した後、AJAX呼び出しテーブルをリフレッシュしてもまだ呼び出されています。使用されるコードは次のとおりです。Edit.xhtmlで

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#doorNumberColumnHeader').parents('th').onclick = null; 
     $('#doorNumberColumnHeader').parents('th').click(function(event) { 
      alert("Preventing AJAX call"); 

      if (event) { 
       event.preventDefault ? event.preventDefault() : event.returnValue = false; 
      } 

      return false; 
      }); 
     }); 
</script> 

Edit.xthmlのOpenFacesのデータテーブル内:

<o:column id="doorNumberColumn" sortingExpression="#{submission.doorNum}" fixed="true" width="50px"> 
    <f:facet name="header"> 
     <h:outputText value="#{bundle.SubmissionDoorNumber}" id="doorNumberColumnHeader"/> 
    </f:facet> 
    <h:outputText value="#{submission.doorNum}"/> 
</o:column> 

停止するAJAX呼び出しを防ぐためにしようとのより良い方法はありますユーザーはテーブルのソート順を変更できますか?

ありがとうございました。

答えて

1

興味のある方は、DOMを作成した後、OpenFaces JavaScript _reload()関数を上書きすることが私の質問に答えていることがわかりました。私は、これはAJAX呼び出しを行うことから、同じページに任意の OpenFacesコンポーネントを防ぐことが理解(それは問題ではないので、ページ上の質問に、私は唯一のデータテーブルを持っているが。)

<script type="text/javascript"> 
    $(document).ready(function() { 
     // Prevent OpenFaces datatable component from sending AJAX requests! 
     window.OpenFaces.Ajax._reload = function(one, two, three) { 
      // Do nothing! 
     }; 
    }); 
</script> 

このソリューションは防ぐことはできません。他のAJAX呼び出しはページ内で行われないので、a4j:commandButtonは引き続き使用できます。

+1

修正のおめでとう!あなたができるときは、他の人があなたの成功から学ぶことができるように、あなたの答えに「受け入れられた」と記入してください。乾杯〜 –

関連する問題