PrimeFaces dataTable le tri ne fonctionne pas

Je vais avoir du mal à obtenir le PrimeFaces dataTable composante du comportement de tri à travailler comme documenté. (Je suis en utilisant PrimFaces 4.0, JSF 2.1.12, et Tomcat 7.0.) Le problème que je vois ne correspond pas à l'un des autres rapports d'incident/de discussions relatives à la PF dataTable, autant que je puis dire. Pour explorer le problème, j'ai créé un exemple basé près sur la Vitrine exemple d'utilisation d'une triés dataTable, la copie de la Vitrine du code source pour le tableBean backing bean (y compris la génération de voiture locale de données pour l'exemple; pas de base de données externe d'accès est impliqué) et la catégorie de Voiture. Le xhtml est également très proche de la copie de la Vitrine exemple:

<!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:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
    </h:head>
    <h:body>
           <h:form>

               <p:dataTable id="dataTable" var="car" value="#{tableBean.carsSmall}">
                   <f:facet name="header">
                       Ajax Sorting
                   </f:facet>

                   <p:column id="modelHeader" sortBy="#{car.model}">
                       <f:facet name="header">
                           <h:outputText value="Model" />
                       </f:facet>
                       <h:outputText value="#{car.model}" />
                   </p:column>

                   <p:column sortBy="#{car.year}">
                       <f:facet name="header">
                           <h:outputText value="Year" />
                       </f:facet>
                       <h:outputText value="#{car.year}" />
                   </p:column>

                   <p:column sortBy="#{car.manufacturer}">
                       <f:facet name="header">
                           <h:outputText value="Manufacturer" />
                       </f:facet>
                       <h:outputText value="#{car.manufacturer}" />
                   </p:column>

                   <p:column sortBy="#{car.color}">
                       <f:facet name="header">
                           <h:outputText value="Color" />
                       </f:facet>
                       <h:outputText value="#{car.color}" />
                   </p:column>
               </p:dataTable>

           </h:form>
    </h:body>
</html>

Lorsque le xhtml est exécuté, le tableau de données s'affiche, mais avec une seule colonne affichée comme étant disponibles pour le tri (c'est à dire, avec les flèches haut/bas de l'icône dans l'en-tête).

La dataTable a deux problèmes:

  1. Une seule des colonnes (An) est montré comme utilisable pour le tri. (Année est une propriété de type "int" dans la classe de Voiture, alors que les trois autres colonnes sont de type Chaîne de caractères, donc, un aspect du problème, c'est que le sortBy="#{voiture.xxx}" tag est ignorée pour les champs de type Chaîne.)
  2. La colonne d'Année est, en fait, pas sortable. En cliquant sur les flèches haut/bas de l'Année en-tête n'a pas d'effet. Un rappel de serveur ne se produire lorsque l'Année d'en-tête est cliqué, mais le tableau n'est pas trié. J'ai dégotté un ELException qui se produit pendant le rappel de serveur, dans lequel le code est de ne pas manipuler l'expression "#{voiture.0}". Que "0" doit, sans aucun doute, "année", et l'échec de l'expression, pas de doute c'est pourquoi, l'absence de tri qui se passe.

Toute aide serait appréciée à comprendre pourquoi cet exemple très simple (copié presque mot pour mot la Vitrine sources) de tenter d'utiliser un PrimeFaces sortable dataTable est de me donner le chagrin.

  • J'ai trouvé la solution à ce problème: Dans PrimeFaces 4.0 le sortBy attribut de la colonne composant changé. Comme de 4.0 le sortBy valeur doit être le nom de la variable (ex: sortBy="année") plutôt qu'une expression de valeur (par exemple, sortBy="#{voiture.an}").
  • Mettre la valeur d'en-tête à l'intérieur de headerText attribut de la colonne, et de supprimer toutes les facettes de colonnes, le tri fonctionne avec #{expression} sur PF 4.0 et versions ultérieures.
InformationsquelleAutor loxodrome | 2013-11-18