JSF 2 dataTable Sortierbeispiel

Beispiel für das Sortieren von JSF 2-Datentabellen

Hier ist die Idee, eine JSF-Datentabelle-Liste zu sortieren:

1. Spaltenüberschrift

Fügen Sie einen commandLink in die Spaltenüberschrift ein. Wenn Sie auf diesen Link klicken, sortieren Sie die dataTable-Liste.


    
        
           Order No
        
    
    #{o.orderNo}

2. Implementierung

Verwendet in der verwalteten BeanCollections.sort() und einen benutzerdefinierten Komparator, um die Liste zu sortieren.

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

    //sort by order no
    public String sortByOrderNo() {

       Collections.sort(orderArrayList, new Comparator() {

        @Override
        public int compare(Order o1, Order o2) {

            return o1.getOrderNo().compareTo(o2.getOrderNo());

        }
       });
    }
    //...
}

dataTable Sortierbeispiel

Ein JSF 2.0-Beispiel zum Implementieren vonsorting feature in dataTable. Klicken Sie auf die Spaltenüberschrift „Order No“ (Bestellnummer), um die Listenreihenfolge nach „Order No“ (Bestellnummer) in aufsteigender Reihenfolge festzulegen. Klicken Sie erneut darauf, und ordnen Sie die Liste nach "Bestellnummer" in absteigender Reihenfolge.

1. Managed Bean

Eine verwaltete Bean, die eine Dummy-Liste zum Testen bereitstellt und die Verwendung vonCollections.sort() to sort the dataTable list zeigt.

package com.example;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
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 List orderArrayList;

    private boolean sortAscending = true;

    private static final Order[] orderList = {
        new Order("A0002", "Harddisk 100TB",
                new BigDecimal("500.00"), 3),
        new Order("A0001", "Intel CPU",
                new BigDecimal("4200.00"), 6),
        new Order("A0004", "Samsung LCD",
                new BigDecimal("5200.00"), 10),
        new Order("A0003", "Dell Laptop",
                new BigDecimal("11600.00"), 9),
        new Order("A0005", "A4Tech Mouse",
                new BigDecimal("200.00"), 20)
    };

    public OrderBean(){

        orderArrayList = new ArrayList(Arrays.asList(orderList));

    }

    public List getOrderList() {

        return orderArrayList;

    }

    //sort by order no
    public String sortByOrderNo() {

       if(sortAscending){

        //ascending order
        Collections.sort(orderArrayList, new Comparator() {

            @Override
            public int compare(Order o1, Order o2) {

                return o1.getOrderNo().compareTo(o2.getOrderNo());

            }

        });
        sortAscending = false;

       }else{

        //descending order
        Collections.sort(orderArrayList, new Comparator() {

            @Override
            public int compare(Order o1, Order o2) {

                return o2.getOrderNo().compareTo(o1.getOrderNo());

            }

        });
        sortAscending = true;
       }

       return null;
    }

    public static class Order{

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

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

        public String getOrderNo() {
            return orderNo;
        }

        public void setOrderNo(String orderNo) {
            this.orderNo = orderNo;
        }

        public String getProductName() {
            return productName;
        }

        public void setProductName(String productName) {
            this.productName = productName;
        }

        public BigDecimal getPrice() {
            return price;
        }

        public void setPrice(BigDecimal price) {
            this.price = price;
        }

        public int getQty() {
            return qty;
        }

        public void setQty(int qty) {
            this.qty = qty;
        }
    }
}

2. dataTable-Tag

Fügen Sie auf einer JSF-Seite ein commandLink-Tag in die Spaltenüberschrift „Order No“ ein, und sortieren Sie die dataTable-Liste, wenn Sie darauf klicken.



    
        
    
    

        

JSF 2 dataTable sorting example

Order No #{o.orderNo} Product Name #{o.productName} Price #{o.price} Quantity #{o.qty}

3. Demo

Zeigt von oben nach unten eine dataTable-Liste an, die in aufsteigender und absteigender Reihenfolge sortiert ist.

jsf2-dataTable-Sorting-Example-1

jsf2-dataTable-Sorting-Example-2

jsf2-dataTable-Sorting-Example-3

Quellcode herunterladen

Laden Sie es herunter -JSF-2-DataTable-Sorting-Example.zip (10 KB)