dataTable sortBy fonction ne fonctionne pas(primefaces)

J'ai un problème avec le primefaces dataTable composant. Je ne sais pas pourquoi il ne court les données dans la table lorsque je clique sur elle.

<p:dataTable var="garbage" value="#{resultsController.allGarbage}" dynamic="true" paginator="true" paginatorPosition="bottom" rows="10"  
             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
             rowsPerPageTemplate="5,10,15">         

            <p:column sortBy="#{garbage[0].filename}">  
            <f:facet name="header">  
            <h:outputText value="Filename" />  
            </f:facet>  
            <h:outputText value="#{garbage[0]}" />
             </p:column> 

            <p:column>  
            <f:facet name="header">  
            <h:outputText value="Description" />  
            </f:facet>  
            <h:outputText value="#{garbage[1]}" />  
             </p:column> 

            <p:column sortBy="#{garbage[2].uploadDate}">  
            <f:facet name="header">  
            <h:outputText value="Upload date" />  
            </f:facet>  
            <h:outputText value="#{garbage[2]}" /> 
             </p:column>                
    </p:dataTable> 

C'est le managed bean

@ManagedBean
@RequestScoped
public class ResultsController {

@EJB
private ISearchEJB searchEJB;

private Garbage[] garbage;

public List<Garbage[]> getAllGarbage() {
    return searchEJB.findAllGarbage();
}

public Garbage[] getGarbage() {
    System.out.println("VALUES!!!!!!!!" + garbage[0].getFilename());
    return garbage;
}

public void setGarbage(Garbage[] garbage) {
    this.garbage = garbage;
}

}

C'est l'EJB qui permet l'accès aux données

@Stateless(name = "ejbs/SearchEJB")

public class SearchEJB implémente ISearchEJB {

@PersistenceContext
private EntityManager em;


public List<Garbage[]> findAllGarbage() {
    Query query = em.createNamedQuery("findAllGarbage");        
    return  query.getResultList();
}

}

Et c'est l'entité(représentation des Données)

@NamedQuery(name = "findAllGarbage", query = "SELECT g.filename, g.description,  g.uploadDate FROM Garbage g;")
    @Entity
    public class Garbage {
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Column(nullable = false)
private String filename;
@Column(nullable = false)
private String fileType;
@Column(nullable = false)
private String uploadDate;
@Column(nullable = false)
private String destroyDate;
@Lob
@Column(nullable = false)
private byte[] file;
@Column(nullable = false)
private String description;
...//Getters and Setters

Comme indiqué dans l'image il n'y a pas de changements, alors que les boutons de tri sont cliqué:
dataTable sortBy fonction ne fonctionne pas(primefaces)

C'est ce que la console dit:

GRAVE: Erreur dans le tri

mise à JOUR

public List<Garbage> findAllGarbage() {
    Query query = em.createNamedQuery("findAllGarbage");    

    List<Garbage> gList = new ArrayList();

    for (Object o: query.getResultList()) {         
      Garbage tmpG = new Garbage();
      tmpG.setFilename(((Garbage) o).getFilename());          
      tmpG.setUploadDate(((Garbage) o).getUploadDate());
      tmpG.setDescription(((Garbage) o).getDescription());

      gList.add(tmpG);
    }
    return  gList;
}

La modification de managed bean

@ManagedBean
@RequestScoped
public class ResultsController {

@EJB
private ISearchEJB searchEJB;

private Garbage garbage;

public List<Garbage> getAllGarbage() {
    return searchEJB.findAllGarbage();
}

public Garbage getGarbage() {
    return garbage;
}

public void setGarbage(Garbage garbage) {
    this.garbage = garbage;
}   

}

De la modification de la JSF

<p:dataTable var="garbage" value="#{resultsController.allGarbage}" dynamic="true" paginator="true" paginatorPosition="bottom" rows="10"  
             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
             rowsPerPageTemplate="5,10,15">         

            <p:column sortBy="#{garbage.filename}" parser="string">  
            <f:facet name="header">  
            <h:outputText value="Filename" />  
            </f:facet>  
            <h:outputText value="#{garbage.filename}" />
             </p:column> 

            <p:column>  
            <f:facet name="header">  
            <h:outputText value="Description" />  
            </f:facet>  
            <h:outputText value="#{garbage.description}" />  
             </p:column> 

            <p:column sortBy="#{garbage.uploadDate}" parser="string">  
            <f:facet name="header">  
            <h:outputText value="Upload date" />  
            </f:facet>  
            <h:outputText value="#{garbage.uploadDate}" /> 
             </p:column>                
    </p:dataTable> 
  • Je ne comprends pas ce que vous essayez de faire. Vous avez une liste de tableaux et de votre table aurait l'impression d'une représentation de Chaîne de Poubelle instance dans chaque cellule. Un peu plus d'infos sur la structure de données permettrait (peut-être).
  • Je viens de mettre à jour et ajout de la façon dont les EJB ressemble, et aussi l'Entité Ordures. J'espère que peut vous aider à comprendre. Dois-je besoin d'ajouter de balise de script sur ma balise head peut-être? Je ne comprends pas pourquoi il ne fonctionne pas.
  • J'ai trouvé quelque chose d'intéressant à ce guide en page 94 web-cinema.googlecode.com/files/primefaces_users_guide_140210.pdf C'est le primefaces guide. Il est dit que si ma datatable est dynamique, devrais-je ajouter parser=”string” attribut de la colonne. Je l'ai fait mais cela n'a pas corrigé la GRAVE: Erreur dans le Tri chose. Je n'ai aucune idée de ce qu'est erreur de tri.
  • Vous pourriez transformer l'Objet[] dans une Liste de Déchets d'objets (à partir du byte[] et les autres champs vides).
InformationsquelleAutor sfrj | 2011-03-29