0

私は dataTable を持っていて、並べ替えを使用するときに特定の行を常に一番上に置きたいと思っています。私に何ができる ?

4

1 に答える 1

0

primefaces 4 ガイド pg で説明されているように、独自の並べ替え関数を実装する必要があります。140

マネージド Bean

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.model.SortOrder;

@ManagedBean
@ViewScoped
public class AlwaysOnTopBean implements Serializable {

    private List<Car> cars;

    @PostConstruct
    public void setup() {
        cars = new ArrayList<Car>();
        //I want b to be always on top
        cars.add(new Car("b"));
        cars.add(new Car("a"));
        cars.add(new Car("c"));
    }

    public int sort(Object o1, Object o2) {

        DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("mainForm:carTable");

        SortOrder sortOrder = SortOrder.valueOf(dataTable.getSortOrder().toUpperCase(Locale.ENGLISH));
        boolean asc = sortOrder.equals(SortOrder.ASCENDING);

        String m1 = o1.toString();
        String m2 = o2.toString();

        if (m2.equals("b")) {
            return (asc) ? 1 : -1;
        }

        return m1.compareToIgnoreCase(m2);
    }

    public List<Car> getCars() {
        return cars;
    }

}

意見

<h:form id="mainForm">
    <p:dataTable id="carTable" value="#{alwaysOnTopBean.cars}" var="car">
        <p:column sortBy="model" headerText="Model" sortFunction="#{alwaysOnTopBean.sort}" >
            #{car.model}
        </p:column>
    </p:dataTable>
</h:form>
于 2013-10-17T19:54:01.103 に答える