2 votes

Variable JSF "total" pour les tableaux de données

J'ai lu le message précédent : La variable "total" de JSF ressemble à c:set dans JSTL. . Bien que la réponse suggère que le total devrait provenir du haricot de sauvegarde, j'ai un besoin réel de le faire dans la facette. Dans mon cas, je veux afficher un tableau de données de type livre de banque, dont chaque ligne est constituée d'une date, d'une description, d'un montant et d'un numéro d'identification. total cumulé . Les données proviennent d'un get JPA de type List<Entity>. Si je faisais le total dans le backing bean, je devrais itérer la liste, créer un modèle de données uniquement dans le but d'une propriété running-total. C'est en effet inefficace.

J'ai essayé :

<c:set var="sum" value="0.0" scope="view" />
    <table>
<ui:repeat value="#{xxxBean.items}" var="item">
    <tr>
        <td><h:outputText value="#{item.date1}" /></td>
        <td><h:outputText value="#{item.desc}" /></td>
        <td><h:outputText value="#{item.amount}" /></td>
    <c:set var="sum" value="${sum+item.amount}"/>
        <td><h:outputText value="${sum}" /></td>
    </tr>
</ui:repeat>
    </table>

mais cela ne fonctionne pas, ${sum} se remet à zéro pour chaque ligne. Existe-t-il un autre moyen, à part la création d'un composant personnalisé ?

1voto

Behrang Points 13471

Ce problème peut encore être résolu en utilisant une méthode dans le haricot d'accompagnement :

public class MyBackingBean {

 private Double runningTotal = 0.0;

 public Double getRunningTotal(Item item) {
   Double result = runningTotal;
   runningTotal += item.getAmount();
   return result;
 }

}

Ensuite, dans votre vue, utilisez ceci pour afficher le total courant :

<td><h:outputText value="#{xxxBean.getRunningTotal(item)}" /></td>

Pas élégant, mais ça marche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X