Comment mettre à jour la ligne dans JSF dataTable

Comment mettre à jour la ligne dans le tableau de données JSF

Cet exemple améliore lesJSF 2 dataTable example précédents, en ajoutant une fonction «update» pour mettre à jour la ligne dans dataTable.

Mettre à jour le concept

Le concept global est assez simple:

1. Ajoutez une propriété «éditable» pour suivre l'état de modification des lignes.

//...
public class Order{

    String orderNo;
    String productName;
    BigDecimal price;
    int qty;

    boolean editable;

    public boolean isEditable() {
        return editable;
    }
    public void setEditable(boolean editable) {
        this.editable = editable;
    }

2. Attribuez un lien «Modifier» à la fin de chaque ligne. Si vous cliquez dessus, définissez «éditable» = vrai. Dans JSF 2.0, vous pouvez fournir directement les valeurs des paramètres dans l'expression de la méthode, voir l'action d'édition ci-dessous:

//...




        Action

        

//...
public String editAction(Order order) {

    order.setEditable(true);
    return null;
}

3. Dans la page JSF, si «ediatble» = true, affichez la zone de texte d'entrée pour l'édition; Sinon, affichez simplement le texte de sortie normal. Une astuce simple pour simuler l'effet de mise à jour :)

//...




    Order No

    

    

4. Enfin, fournissez un bouton pour enregistrer vos modifications. Lorsque vous apportez des modifications dans la zone de texte d'entrée et l'enregistrez, toutes les valeurs sont automatiquement liées au bean de sauvegarde associé.

//...

Exemple

Un exemple JSF 2.0 pour implémenter le concept ci-dessus pour mettre à jour la ligne dans dataTable.

1. Bean géré

Un bean géré nommé «order», qui s'explique de lui-même.

package com.example;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="order")
@SessionScoped
public class OrderBean implements Serializable{

    private static final long serialVersionUID = 1L;

    private static final ArrayList orderList =
        new ArrayList(Arrays.asList(

        new Order("A0001", "Intel CPU",
                new BigDecimal("700.00"), 1),
        new Order("A0002", "Harddisk 10TB",
                new BigDecimal("500.00"), 2),
        new Order("A0003", "Dell Laptop",
                new BigDecimal("11600.00"), 8),
        new Order("A0004", "Samsung LCD",
                new BigDecimal("5200.00"), 3),
        new Order("A0005", "A4Tech Mouse",
                new BigDecimal("100.00"), 10)
    ));

    public ArrayList getOrderList() {
        return orderList;
    }

    public String saveAction() {

        //get all existing value but set "editable" to false
        for (Order order : orderList){
            order.setEditable(false);
        }
        //return to current page
        return null;

    }

    public String editAction(Order order) {

        order.setEditable(true);
        return null;
    }

    public static class Order{

        String orderNo;
        String productName;
        BigDecimal price;
        int qty;
        boolean editable;

        public Order(String orderNo, String productName, BigDecimal price, int qty) {
            this.orderNo = orderNo;
            this.productName = productName;
            this.price = price;
            this.qty = qty;
        }

        //getter and setter methods
    }
}

2. Page JSF

Page JSF pour afficher les données avec la balise dataTable et créer un lien «modifier» pour mettre à jour l'enregistrement de ligne.



    
        
    
    

        

JSF 2 dataTable example

Order No Product Name Price Quantity Action

3. Demo

De haut en bas, affiche un enregistrement de ligne en cours de mise à jour.

jsf2-dataTable-Update-Example-1

jsf2-dataTable-Update-Example-2

jsf2-dataTable-Update-Example-3

jsf2-dataTable-Update-Example-4

Télécharger le code source

Téléchargez-le -JSF-2-DataTable-Update-Example.zip (10 Ko)