一个列表,点击列头的时候自动排序。比如userName,department,createTime,等等
原理是用HtmlAjaxSupport获得当前用户点击的列头的String,然后对当先列进行排序
<f:facet name="header" >
<h:outputText value="用户名" style="cursor:hand'>
<a4j:support event="onclick" reRender="dateTableList"
actionListener="#{backBean.orderSequence}" >
<a4j:actionparam value="username" />
</a4j:support>
</h:outputText>
</f:facet>
Backbean排序的方法
private boolean flag = true;
public void orderSequence(ActionEvent event){
if(flag){
HtmlAjaxSupport has = (HtmlAjaxSupport) event.getComponent();
HtmlActionParameter param = (HtmlActionParameter) has.getChildren().get(0);
String attributeKey = (String) param.getValue();
OrderComparator comparator = OrderComparator.getInstance();
comparator.setAttrubuteKey(attributeKey);
logger.info("开始对"+attributeKey+"进行排序");
Collections.sort(this.roleBeanList,comparator);
logger.info("对"+attributeKey+"进行排序完毕");
flag = !flag;
}else{
Collections.reverse(this.roleBeanList);
flag = !flag;
}
}
Collentions中的comparator的获得方法
public synchronized int compare(Object o1, Object o2) {
return operateOrder(o1,o2);
}
private int operateOrder(Object o1, Object o2){
if(o1 instanceof User && o2 instanceof User){
User u1 = (User) o1;
User u2 = (User) o2;
if(this.attrubuteKey.equals("username")){
return u1.getUsername().compareToIgnoreCase(u2.getUsername());
}else if(this.attrubuteKey.equals("fullname")){
return u1.getFullname().compareToIgnoreCase(u2.getFullname());
}else if(this.attrubuteKey.equals("description")){
return u1.getDescription().compareToIgnoreCase(u2.getDescription());
}else if(this.attrubuteKey.equals("department")){
return u1.getDepartment().compareToIgnoreCase(u2.getDepartment());
}else if(this.attrubuteKey.equals("mobilePhone")){
return u1.getMobilePhone().compareToIgnoreCase(u2.getMobilePhone());
}else if(this.attrubuteKey.equals("phone")){
return u1.getPhone().compareToIgnoreCase(u2.getPhone());
}else if(this.attrubuteKey.equals("email")){
return u1.getEmail().compareToIgnoreCase(u2.getEmail());
}else if(this.attrubuteKey.equals("createTime")){
String ds1 = u1.getCreateTime();
String ds2 = u2.getCreateTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d1 = sdf.parse(ds1);
Date d2 = sdf.parse(ds2);
return d1.compareTo(d2);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return 0;
}