2013-04-27 6 views
5

Ich weiß, dass diese Frage dupliziert werden kann, aber ich kann wirklich nicht die Lösung für mein Problem finden; mein Problem, dass Datatable Funktionalität wie Sortieren und Filtern funktioniert nicht, wenn ich auf eine Zeile klicken, um die Details anzuzeigen, nachdem ich den Dialog zu schließen alles "Sortieren, Filtern" funktioniert normal und wie erwartet.Primes Dataset Sortieren und Filtern funktioniert nicht bis Zeile Wählen

hier ist mein Code: 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"); 
    } 
} 

Und hier ist die 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

Es sollte einen Link oder eine Schaltfläche geben, die den Benutzer auf diese Seite führt, um ihn zu finden und 'ajax = false' zu ​​setzen. –

+0

@ ÖmerFarukAlmalı Haben Sie das Hauptproblem verstanden? –

+0

@LuiggiMendoza Ja, es scheint, als wäre der Ansichtsstatus-Fehler ähnlich wie bei [http://stackoverflow.com/a/10665237/1659451] –

Antwort

1

ich ein ähnliches Problem auf meinem Bildschirm zurück einige Zeit gesehen haben. Wenn die Seite nicht vollständig gerendert wird, werden Sortierung und Filterung nicht ausgeführt. Zu Testzwecken könnten Sie versuchen, die Java-Skripte zu entfernen und es zu versuchen. Eine andere Möglichkeit zum Debuggen ist die Verwendung von Chrome Hit F12 und schauen Sie auf der Registerkarte Netzwerke nach Ajax-Aufrufen. Hoffe das hilft.

1

Ich hatte das gleiche Problem, in meinem Fall habe ich nicht nur das ausgewählte Objekt in meinem "setSelected", ich habe auch eine Operation für das ausgewählte Objekt. Das Problem ist: "setSelected" wird aufgerufen, bevor eine Zeile ausgewählt wird, mit setSelected (null). Wenn Sie eine Operation mit diesem "Null" -Wert ausführen, können schwerwiegende Probleme auftreten. Die Lösung besteht darin, nur auf Null zu prüfen, bevor die erforderlichen Operationen ausgeführt werden.

Ich weiß nicht, ob Ihr Problem das gleiche ist, aber da Sie Ihren Code für "setSelected" nicht gepostet haben, könnte es es sein.

+0

Dies war am wahrscheinlichsten, wenn Sie auch ein Ajax-Ereignis hatten, in dem Sie das ausgewählte Element benötigten, oder? – Kukeltje

Verwandte Themen