文章借鉴以下文章:
pinyin4j项目:http://pinyin4j.sourceforge.net/
extremeComponents排序实现不区分大小:http://www.blogjava.net/fastzch/archive/2006/04/07/39918.html
Java中文排序完美新解:http://blog.csdn.net/dada9407/article/details/2975622
向工程中加入pinyin4j-2.5.0.jar(文末提供pinyin4j-2.5.0.jar和pinyin4j-2.5.0.zip)。
把pinyin4j-2.5.0.jar拷入WebRoot/WEB-INF/lib,并添加到classpath。
在jsp页面标签中需指明排序所用的接口:sortRowsCallback="com.heer.MySortCallback"
<ec:table tableId="statList" retrieveRowsCallback="limit" filterRowsCallback="limit" var="result" items="resultList" action="${pageContext.request.contextPath}/stat.do?method=${actionMethod}" title="统计结果" width="100%" rowsDisplayed="10" filterable="false" sortRowsCallback="com.heer.MySortCallback" >
定义自己的Comparator类
package com.heer; import java.text.Collator; import java.util.Comparator; import net.sourceforge.pinyin4j.PinyinHelper; import org.apache.commons.collections.comparators.NullComparator; public class MyComparator extends NullComparator { Collator collator = Collator.getInstance(); public int compare(Object o1, Object o2) { String key1 = o1 == null ? "" : o1.toString(); String key2 = o2 == null ? "" : o2.toString(); if(isNumeric(key1)&&isNumeric(key2)){ return (int) (Double.valueOf(key1)-Double.valueOf(key2)); }else{ for (int i = 0; i < key1.length() && i < key2.length(); i++) { int codePoint1 = key1.charAt(i); int codePoint2 = key2.charAt(i); if (Character.isSupplementaryCodePoint(codePoint1) || Character.isSupplementaryCodePoint(codePoint2)) { i++; } if (codePoint1 != codePoint2) { if (Character.isSupplementaryCodePoint(codePoint1) || Character.isSupplementaryCodePoint(codePoint2)) { return codePoint1 - codePoint2; } String pinyin1 = pinyin((char) codePoint1); String pinyin2 = pinyin((char) codePoint2); if (pinyin1 != null && pinyin2 != null) { // 两个字符都是汉字 if (!pinyin1.equals(pinyin2)) { return pinyin1.compareTo(pinyin2); } } else { return codePoint1 - codePoint2; } } } } return key1.length() - key2.length(); } private String pinyin(char c) { String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c); if (pinyins == null) { return null; // 如果转换结果为空,则返回null } return pinyins[0]; // 如果为多音字返回第一个音节 } public static boolean isNumeric(String str) { int begin = 0; boolean once = true; if (str == null || str.trim().equals("")) { return false; } str = str.trim(); if (str.startsWith("+") || str.startsWith("-")) { if (str.length() == 1) { // "+" "-" return false; } begin = 1; } for (int i = begin; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { if (str.charAt(i) == '.' && once) { // '.' can only once once = false; } else { return false; } } } if (str.length() == (begin + 1) && !once) { // "." "+." "-." return false; } return true; } }
实现SortRowsCallback接口
package com.heer; import java.util.Collection; import java.util.Collections; import java.util.List; import org.apache.commons.beanutils.BeanComparator; import org.apache.commons.collections.comparators.ReverseComparator; import org.extremecomponents.table.bean.Column; import org.extremecomponents.table.callback.SortRowsCallback; import org.extremecomponents.table.core.TableConstants; import org.extremecomponents.table.core.TableModel; import org.extremecomponents.table.limit.Sort; public final class MySortCallback implements SortRowsCallback { public Collection sortRows(TableModel model, Collection rows) throws Exception { boolean sorted = model.getLimit().isSorted(); if (!sorted) { return rows; } Sort sort = model.getLimit().getSort(); String sortProperty = sort.getProperty(); String sortOrder = sort.getSortOrder(); Column column = model.getColumnHandler().getColumnByAlias(sortProperty); String property = column.getProperty(); if (sortOrder.equals(TableConstants.SORT_ASC)) { BeanComparator comparator = new BeanComparator(property, new MyComparator()); Collections.sort((List) rows, comparator); } else if (sortOrder.equals(TableConstants.SORT_DESC)) { BeanComparator reversedNaturalOrderBeanComparator = new BeanComparator( property, new ReverseComparator(new MyComparator())); Collections.sort((List) rows, reversedNaturalOrderBeanComparator); } return rows; } }
这样常用汉字和非常用都会取汉字的汉语拼音,再按照英文字符的比较方法进行排序。
相关推荐
同时,也会提供一些调试技巧和最佳实践,帮助开发者解决可能出现的问题。 通过阅读并实践"extremeComponents中文文档",开发者可以充分利用这个库的强大功能,提高开发效率,打造一流的Web应用体验。无论你是初学者...
1. **组件配置**:了解如何在XML配置文件或Java代码中声明和配置extremecomponents的列表控件,包括设置数据源、定义列宽、设定排序规则等。 2. **数据绑定**:学习如何将后端数据模型与列表控件绑定,这可能涉及到...
eXtremeComponents控件指南
总结起来,eXtremeComponents-1.0.1+中文API分页工具是Java Swing开发者的强大助手,它通过易用的API和实例代码,为开发者提供了便捷的分页解决方案。无论是初次接触还是经验丰富的开发者,都能从中受益,提升项目的...
7. **错误处理与调试**:遇到问题时的排查方法,常见错误的解决方案,以及如何进行有效的调试。 8. **兼容性和浏览器支持**:文档会指出 Extreme Components 对不同浏览器的支持情况,包括IE、Firefox、Chrome、...
2. **调试器**: 内置的EC专用调试工具,便于定位和解决问题。 3. **模板与示例**: 提供多种预设模板和示例项目,加速开发进程。 ### 四、eXtremeComponents使用技巧 1. **性能优化**: 使用缓存策略和懒加载机制,...
"extreme 列表组件"是eXtremeComponents中的核心部分,它通常指的是能够高效处理大量数据,并提供动态排序、筛选、分页等功能的列表视图。这类组件对于数据密集型应用,如数据分析工具、数据库管理软件或者任何需要...
此外,文档通常还会包含故障排除指南和常见问题解答,帮助开发者解决在使用过程中遇到的问题。 总之,eXtremeComponents详尽文档包是学习和精通EC组件的宝贵资源,它提供了一条从新手到熟练开发者的学习路径。通过...
extremeComponents开发指南,快速掌握extremeComponents开发
extremecomponents 包
**eXtremeComponents介绍** eXtremeComponents(简称EC)是一套强大的Java组件库,主要用于构建企业级的Web应用程序。它以其高效、灵活和高度可定制的特点,在开发社区中受到广泛的关注。EC旨在提高开发人员的工作...
7. **问题解决**:提供常见问题的解决方案,帮助开发者在遇到问题时迅速找到解决办法,提高开发效率。 8. **最佳实践**:分享一些使用 ExtremeComponents 的最佳实践,比如组件组合使用、代码结构规划等,以提升...
同时,社区支持和技术文档也是评估组件库价值的重要部分,它们可以帮助开发者解决在使用过程中遇到的问题。 总的来说,eXtremeComponents-1.0.3是一个值得信赖的开发工具集,它能够简化开发过程,提升开发效率,...
《深入理解eXtremeComponents:打造高效JSP表格展示》 在Web开发领域,高效地展示数据是一项至关重要的任务,特别是在使用Java Server Pages (JSP) 的项目中。eXtremeComponents 是一个功能强大的组件库,尤其以其...
eXtremeComponents1.0.1.jar
【eXtremeComponents 源代码】是一个与Java编程相关的资源,主要包含有源代码和.jar包。这个开源项目提供了丰富的组件集合,为开发者在构建Java应用程序时提供了便利。eXtremeComponents的设计目标是提高开发效率,...
"ExtremeComponents"是一个开源项目,其源代码包含了用于构建Web应用程序的组件库。这个库主要设计用于提高开发效率,提供了一系列高效、可定制且功能丰富的Web UI组件。这些组件通常包括表格、表单、菜单、按钮等...
《eXtremeComponents控件分页导出数据Demo详解》 在软件开发过程中,高效的数据展示和管理是至关重要的。eXtremeComponents控件系列以其强大的功能和灵活的定制性,在.NET平台上赢得了广大开发者的一致好评。尤其是...
eXtremeComponents组件,导出Excel或pdf文件的jar包