Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在primefaces中排序时,如何将行始终设置在表的顶部?_Java_Sorting_Jsf_Primefaces_Datatable - Fatal编程技术网

Java 在primefaces中排序时,如何将行始终设置在表的顶部?

Java 在primefaces中排序时,如何将行始终设置在表的顶部?,java,sorting,jsf,primefaces,datatable,Java,Sorting,Jsf,Primefaces,Datatable,我有一个dataTable,当我使用sort时,我希望一个特定的行始终位于顶部。 我能做什么?您需要实现自己的排序功能,如primefaces 4指南第140页所述 托管Bean import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Locale; import javax.annotation.PostConstruct; import javax.fac

我有一个dataTable,当我使用sort时,我希望一个特定的行始终位于顶部。
我能做什么?

您需要实现自己的排序功能,如primefaces 4指南第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;
    }

}
import java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Locale;
导入javax.annotation.PostConstruct;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.ViewScoped;
导入javax.faces.context.FacesContext;
导入org.primefaces.component.datatable.datatable;
导入org.primefaces.model.SortOrder;
@ManagedBean
@视域
公共类AlwaysOnTopBean实现可序列化{
私家车名单;
@施工后
公共作废设置(){
cars=新阵列列表();
//我希望b永远在最上面
汽车。添加(新车(“b”);
增加(新车(“a”));
增加(新车(“c”));
}
公共整数排序(对象o1、对象o2){
DataTable DataTable=(DataTable)FacesContext.getCurrentInstance().getViewRoot().findComponent(“mainForm:carTable”);
SortOrder SortOrder=SortOrder.valueOf(dataTable.getSortOrder().toUpperCase(Locale.ENGLISH));
布尔asc=sortOrder.equals(sortOrder.升序);
字符串m1=o1.toString();
字符串m2=o2.toString();
如果(m2等于(“b”)){
退货(asc)?1:-1;
}
返回m1.compareToIgnoreCase(m2);
}
公共列表getCars(){
返回车辆;
}
}
查看

<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>

#{car.model}

我找到了它,但我希望元素始终位于顶部,此解决方案将使元素位于顶部,但下次排序时,它将位于列表底部:(