2012-05-30 36 views
1

我使用Liferay 6.0.6中的liferay searchcontainer的单列标题进行排序。 现在我想申请排序在多个领域,即名字,姓氏,日期以升序或降序。 任何人可以帮助我..对liferay中的多列标题进行排序searchcontainer

在此先感谢....

+0

你可以是一个更加清楚一点。你是否想按多个列进行排序,如按照firstName desc排序,然后按lastName asc排序,然后按modifiedDate asc排序,或者您只希望该排序应该出现在所有标题列上,并且点击之前的排序会丢失,并按照新的排序? –

+0

我做了我的概率..... –

+0

所以你可以为社区的利益回答自己的问题,如果可能的话编辑问题,使其更清楚?谢谢 –

回答

5

view.jsp的

<% 
PortalPreferences portalPrefs = PortletPreferencesFactoryUtil.getPortalPreferences(request); 
String orderByCol = ParamUtil.getString(request, "orderByCol"); 
String orderByType = ParamUtil.getString(request, "orderByType"); 
System.out.println("Col "+ orderByCol); 


if (Validator.isNotNull(orderByCol) && Validator.isNotNull(orderByType)) { 
portalPrefs.setValue("NAME_SPACE", "order-by-col", orderByCol); 
portalPrefs.setValue("NAME_SPACE", "order-by-type", orderByType); 

} else { 

orderByCol = portalPrefs.getValue("NAME_SPACE", "order-by-col", "Date"); 
orderByType = portalPrefs.getValue("NAME_SPACE", "order-by-type", "asc"); 

} 
%> 


<liferay-ui:search-container delta='20' emptyResultsMessage="No Form Submitted" orderByCol="<%= orderByCol %>" orderByType="<%= orderByType %>"> 

<liferay-ui:search-container-results> 

<% 
      List<User> userList = UserLocalServiceUtil.getUsers(-1,-1); 
      OrderByComparator orderByComparator =  
      CustomComparatorUtil.getUserOrderByComparator(orderByCol, orderByType);   

      Collections.sort(userList,orderByComparator); 

      results = ListUtil.subList(userList, searchContainer.getStart(), 
        searchContainer.getEnd()); 

       if (userList.size()< total) 
       {total = userList.size(); 
       } 

       pageContext.setAttribute("results", results); 
       pageContext.setAttribute("total", total); 

%> 


</liferay-ui:search-container-results> 

    <liferay-ui:search-container-row 
    className="com.liferay.portal.model.User" 

    modelVar="user"> 

    <liferay-ui:search-container-column-text 
     name="Screen Name" 
     property="screenName" 
     orderable="<%= true %>" 
     orderableProperty="screenName" 
    /> 

     <liferay-ui:search-container-column-text 
     name="Email" 
     property="emailAddress" 
     orderable="<%= true %>" 
    orderableProperty="emailAddress" 
    /> 

     <liferay-ui:search-container-column-text 
     name="Date" 
     property="createDate" 
     orderable="<%= true %>" 

    /> 


    </liferay-ui:search-container-row> 

    <liferay-ui:search-iterator /> 

</liferay-ui:search-container> 

CustomComparatorUtil

public static OrderByComparator getUserOrderByComparator(
       String orderByCol, String orderByType) { 


       boolean orderByAsc = false; 

       if (orderByType.equals("asc")) { 
       orderByAsc = true; 
       } 

       OrderByComparator orderByComparator = null; 

       System.out.println("Custom "+ orderByCol); 
       if (orderByCol.equalsIgnoreCase("screenName")) { 
        System.out.println("1"); 
       orderByComparator = new FirstNameComparator(orderByAsc); 
       } 
       else if (orderByCol.equalsIgnoreCase("emailAddress")) { 
        System.out.println("2"); 
       orderByComparator = new EmailComparator(orderByAsc); 
       } 
       else if (orderByCol.equalsIgnoreCase("Date")) { 
       System.out.println("3"); 
       orderByComparator = new DateComparator(orderByAsc); 
       }/* 
       else if (orderByCol.equalsIgnoreCase("Job Title")) { 

       orderByComparator = new JobTitleComparator(orderByAsc); 
       }*/ 

       return orderByComparator; 
       } 

FirstNameComparator

public static String ORDER_BY_ASC =“status ASC”;

public static String ORDER_BY_DESC = "status DESC"; 


    public FirstNameComparator() 
    { 
    this(false); 
    } 

    public FirstNameComparator(boolean asc) { 
    _asc = asc; 
    } 

public int compare(Object obj1, Object obj2) { 

    User instance1 = (User) obj1; 
    User instance2 = (User) obj2; 

    int value = instance1.getFirstName().toLowerCase().compareTo(instance2.getFirstName().toLowerCase()); 

    if(_asc) 
    { 
    return value; 
    } else 
    { 
    return -value; 
    } 

} 


public String getOrderBy() { 

    if (_asc) { 
    return ORDER_BY_ASC; 
    } 
    else { 
    return ORDER_BY_DESC; 
    } 
    } 

private boolean _asc; 

}

同样ü可以使EMAILADDRESS和Date类..

+2

此解决方案不使用数据库排序,所以如果表中包含大量的数据此解决方案将杀死数据库和应用程序。服务器。 – uthark