2013-04-27 3 views
5

So che questa domanda può essere duplicata ma non riesco davvero a trovare la soluzione per il mio problema; il mio problema che funzionalità databili come l'ordinamento e il filtraggio non funzionano a meno che non clicchi su una riga qualsiasi per mostrare la finestra di dialogo dei dettagli dopo aver chiuso la finestra di dialogo tutto "l'ordinamento, il filtraggio" funziona normalmente e come previsto.L'ordinamento e il filtraggio databili delle primefaces non funzionano fino a rowSelect

Ecco il mio codice: 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"); 
    } 
} 

Ed ecco il 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

Ci dovrebbe essere il collegamento o il pulsante che naviga l'utente a questa pagina trovarlo e impostare 'ajax = false'. –

+0

@ ÖmerFarukAlmalı sei sicuro di aver capito il problema principale? –

+0

@LuiggiMendoza Sì, sembra come il bug dello stato di visualizzazione simile a [questo] (http://stackoverflow.com/a/10665237/1659451) –

risposta

1

ho visto un problema simile sul mio schermo qualche tempo fa. Quando la pagina non è completamente renderizzata, l'ordinamento e il filtraggio non si verificano. A scopo di test, potresti provare a rimuovere gli script java e provare. Un altro modo per eseguire il debug è usare chrome hit f12 e guardare la scheda delle reti per scoprire le chiamate Ajax. Spero che questo ti aiuti.

1

Ho avuto lo stesso problema, nel mio caso non stavo semplicemente impostando l'oggetto selezionato nel mio "setSelected", stavo facendo anche qualche operazione sull'oggetto selezionato. Il problema è: "setSelected" viene chiamato prima che qualsiasi riga sia selezionata, con setSelected (null). Se fai qualche operazione con questo valore "null" puoi avere seri problemi. La soluzione è solo per verificare la presenza di null prima di eseguire le operazioni necessarie.

Non so se il tuo problema è lo stesso, ma dal momento che non hai inserito il tuo codice per "setSelected", potrebbe essere esso.

+0

Questo è stato più probabile quando hai avuto anche un evento Ajax in cui hai avuto bisogno dell'elemento selezionato, giusto? – Kukeltje

Problemi correlati