2013-04-27 5 views
5

この質問は重複する可能性がありますが、私は本当に問題の解決策を見つけることができません。私の問題は、並べ替えやフィルタリングのようなdatatable機能は、すべての行をクリックしてダイアログを閉じた後、詳細ダイアログを表示しない限り、「並べ替え、フィルタリング」は正常に動作しています。primefacesデータソートとフィルタリングがrowSelectまで動作しない

は、ここに私のコードです: Bean.java

@ViewScoped 
public class HomeBean implements Serializable { 

    private List<Ticket> filteredTickets; 
    private List<Ticket> tickets; 
    private Ticket   selectedTicket; 
    private Ticket[]  selectedTickets; 

    public HomeBean() { 
     super(); 
    } 

    @PostConstruct 
    public void init() { 
     getData(); 
    } 

    private void getData() { 
     TicketFacade service; 
     service = TicketFacade.getInstance(); 
     try { 
      tickets = service.selectTickets(); 
     } catch (Exception e) { 
      logger.error(Utilities.printStackTrace(e)); 
     } 
    } 
    // setter & getters 

    @PreDestroy 
    public void finalize() { 
     logger.debug("@PreDestroy"); 
    } 
} 

を、ここで私はいくつかの時間戻って私の画面上で同様の問題を見てきましたXHTML

<?xml version="1.0" encoding="ISO-8859-1" ?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:c="http://java.sun.com/jsp/jstl/core"> 

<f:view contentType="text/html"> 
    <h:head> 
     <f:facet name="first"> 
      <meta content='text/html; charset=UTF-8' http-equiv="Content-Type" /> 
      <title>Home Page</title> 
     </f:facet> 

     <script type="text/javascript"> 
      window.history.forward(); 
      function noBack() { 
       window.history.forward(); 
      } 
     </script> 
    </h:head> 

     <h:body id="body-view" onload="noBack();" 
      onpageshow="if (event.persisted) noBack();" onunload=""> 
      <f:view locale="#{userManager.locale}"> 
       <h:form id="Ticket"> 
        <p:dataTable var="ticket" value="#{homeBean.tickets}" 
         rowKey="#{ticket.id}" paginator="true" rows="15" 
         selection="#{homeBean.selectedTicket}" selectionMode="single" 
         filteredValue="#{homeBean.filteredTickets}" id="ticketsTable" 
         emptyMessage="#{lbl.noTicketsFound}" 
         style="margin-bottom:10px;margin-top:10px;"> 
         <p:ajax event="rowSelect" update=":Ticket:display" 
          oncomplete="ticketDialog.show()" /> 

         <f:facet name="header">#{lbl.listOfTickets}</f:facet> 

         <p:column headerText="#{lbl.tblId}" sortBy="#{ticket.id}" 
          filterBy="#{ticket.id}" id="id"> 
          <h:outputLink value="#{edit.xhtml?id=#{ticket.id}">#{ticket.id}</h:outputLink> 

         </p:column> 

         <p:column headerText="#{lbl.tblTitle}" sortBy="#{ticket.title}" 
          filterBy="#{ticket.title}" id="title"> #{ticket.title} 
            </p:column> 

        </p:dataTable> 

        <p:dialog header="#{lbl.moreTicketDetails}" widgetVar="ticketDialog" 
         resizable="true" width="500" showEffect="explode" 
         hideEffect="explode" closable="true" draggable="true"> 

         <h:panelGrid id="display" columns="2" cellpadding="4" 
          dir="#{lbl.dir}"> 
          <h:outputText for="shortDescription" 
           value="#{lbl.shortDescription}" /> 
          <h:outputText id="shortDescription" 
           value="#{homeBean.selectedTicket.shortDescription}" /> 

          <h:outputText for="callCenterList" value="#{lbl.callcenters}" /> 
          <h:outputText id="callCenterList" 
           value="#{homeBean.selectedCallCenters}"> 
          </h:outputText> 
         </h:panelGrid> 
        </p:dialog> 
       </h:form> 
      </f:view> 
     </h:body> 
     </f:view> 
    </html> 
+0

このページに移動するためのリンクまたはボタンがあり、それを見つけて 'ajax = false'を設定する必要があります。 –

+0

@ÖmerFarukAlmalıあなたは主な問題を理解していますか? –

+0

@LuiggiMendozaはい、これは[this](http://stackoverflow.com/a/10665237/1659451) –

答えて

1

です。ページが完全にレンダリングされていない場合、並べ替えとフィルタリングは起こりません。テスト目的のために、Javaスクリプトを削除して試してみてください。 デバッグするもう1つの方法は、chrome hit f12を使用し、ajax呼び出しを検出するためにネットワークタブを調べることです。お役に立てれば。

1

私は同じ問題を抱えていましたが、選択したオブジェクトを「setSelected」に設定するだけでなく、選択したオブジェクトに対していくつかの操作を行っていました。問題は次のとおりです。setSelected(null)を指定して行を選択する前に、「setSelected」が呼び出されます。この "null"値で操作を行うと、深刻な問題が発生する可能性があります。解決策は、必要な操作を行う前にヌルをチェックすることです。

あなたの問題が同じかどうかはわかりませんが、 "setSelected"のコードを投稿していないので、それはそれかもしれません。

+0

これは、あなたが選択したアイテムを必要とするajaxイベントを持っていたときに起こりそうですね。 – Kukeltje

関連する問題