Java 在primefaces中排序时,如何将行始终设置在表的顶部?
我有一个dataTable,当我使用sort时,我希望一个特定的行始终位于顶部。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
我能做什么?您需要实现自己的排序功能,如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}
我找到了它,但我希望元素始终位于顶部,此解决方案将使元素位于顶部,但下次排序时,它将位于列表底部:(