首先,需要在ec:table标签中设置
filterable="true"
filterRowsCallback="limit"
retrieveRowsCallback="limit"
sortRowsCallback="limit"
在StrutsEntityAction类添加一个方法
public ActionForward doQuery(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
T obcect = null;
try {
obcect = entityClass.newInstance();
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
bindEntity(form, obcect);
// 当列表的分页 过滤 排序等操作是基于数据库时,必须要用到Limit对象.
// 注意,当页面有多个ec的时候,需要使用带 tableId参数的同名方法.
Limit limit = ExtremeTablePage.getLimit(request);
// 基于数据库的排序.
// ec会取得排序的相关信息:当前是按哪个(目前只支持单列排序)column排序的,以及排序的方式desc或asc,
Sort sort = limit.getSort();
Map<String, String> sortValueMap = sort.getSortValueMap(); //此方法可自行封装
if (sortValueMap.isEmpty()) {
sortValueMap.put(idName, TableConstants.SORT_ASC);
}
// 基于数据库过滤.
// ec会取得过滤的相关信息:当前是对哪些column进行过滤,以及过滤的内容是什么
FilterSet filterSet = limit.getFilterSet();
Map<String, String> filterPropertyMap = filterSet.getPropertyValueMap(); //此方法可自行封装
// DEFAULT_PAGE_SIZE ==0 时, 每页记录数会使用 properties文件内的默认设置
// DEFAULT_PAGE_SIZE <0 时, 每页记录数会等于全部记录数
int totalRows = ExtremeTablePage.getTotalRowsFromRequest(request);
if (totalRows < 0) {
// 取得记录总条数时,不要忘了把filter作为参数传入,因为要取得的总行数也是要接受条件限制的.
totalRows = getEntityManager().FindTotalEntitys(obcect, filterPropertyMap);
}
limit.setRowAttributes(totalRows, DEFAULT_PAGE_SIZE);
//保存总计行数到返回
request.setAttribute(TableConstants.TOTAL_ROWS, totalRows);
// 取得当前要查询的页面的记录起止行号
// offset表示数据编号的起始号,不同的数据库起始号不一样
int offset = 0;
int[] rowStartEnd = new int[] { limit.getRowStart() + offset, limit.getRowEnd() + offset };
// rowStartEnd[0], rowStartEnd[1] 左闭 右开
List list = (List) getEntityManager().FindEntitysForPage(rowStartEnd[0], rowStartEnd[1], obcect, sortValueMap, filterPropertyMap);
request.setAttribute(getEntityListName(), list);
return mapping.findForward(LIST);
}
其中应用到ExtremeTablePage类
/**
* ec组件的工具类
*
* @author peter
*
*/
public class ExtremeTablePage {
public static Limit getLimit(HttpServletRequest request) {
Context context = new HttpServletRequestContext(request);
LimitFactory limitFactory = new TableLimitFactory(context);
TableLimit limit = new TableLimit(limitFactory);
return limit;
}
public static String getTableId(HttpServletRequest request) {
return getTableId(request, null);
}
public static int getTotalRowsFromRequest(HttpServletRequest request) {
return getTotalRowsFromRequest(request, null);
}
public static int getTotalRowsFromRequest(HttpServletRequest request, String cTableId) {
int totalRows = -1;
String tableId = getTableId(request, cTableId);
tableId = tableId == null ? "" : tableId + "_";
Integer totalRowsI = (Integer) request.getAttribute(tableId + TableConstants.TOTAL_ROWS);
try {
if (totalRowsI != null) {
totalRows = totalRowsI.intValue();
} else {
String totalRowsS = request.getParameter(tableId + "totalrows");
totalRows = Integer.parseInt(totalRowsS);
}
} catch (Exception e) {
totalRows = -1;
}
totalRows = totalRows < 0 ? -1 : totalRows;
return totalRows;
}
public static String getTableId(HttpServletRequest request, String cTableId) {
if (cTableId != null) {
return cTableId;
}
String tableId = request.getParameter(TableConstants.EXTREME_COMPONENTS_INSTANCE);
if (tableId == null) {
tableId = TableConstants.EXTREME_COMPONENTS;
}
return tableId;
}
}
在HibernateEntityDao类添加两个方法
public Integer FindTotalEntitys(T object, Map<String, String> filter) {
Criteria criteria = createCriteria();
if (filter != null && !filter.isEmpty()) {
Set<String> filterNameSet = filter.keySet();
for (String name : filterNameSet) {
criteria.add(Restrictions.like(name, "%" + filter.get(name) + "%"));
}
}
return (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();
}
public List<T> FindEntitysForPage(int startRow, int countPerPage, T object, Map<String, String> order, Map<String, String> filter) {
Criteria criteria = createCriteria();
if (order != null && !order.isEmpty()) {
Set<String> orderNameSet = order.keySet();
for (String name : orderNameSet) {
if ("asc".equalsIgnoreCase(order.get(name))) {
criteria.addOrder(Order.asc(name));
} else {
criteria.addOrder(Order.desc(name));
}
}
}
if (filter != null && !filter.isEmpty()) {
Set<String> filterNameSet = filter.keySet();
for (String name : filterNameSet) {
criteria.add(Restrictions.like(name, "%" + filter.get(name) + "%"));
}
}
return criteria.setFirstResult(startRow).setMaxResults(countPerPage - startRow).list();
}
如此便可实现基本的功能。
分享到:
相关推荐
它通常与DAO层结合使用,帮助我们在服务层进行数据筛选,避免在数据库层面进行复杂的查询,提高代码的可维护性和灵活性。 2. **工作原理** PropertyFilter的工作原理是接收一组由用户指定的过滤条件(比如,属性名...
1. **更换MySQL数据库**:SpringSide5项目将原有的数据库系统替换成了MySQL,这是一个广泛使用的开源关系型数据库管理系统,具有良好的性能和可扩展性。这种更换可能涉及到数据库设计、SQL查询优化以及事务处理等...
8. **持续集成**:与Jenkins、Git等工具集成,springside支持持续集成和版本控制,方便团队协作。 9. **测试支持**:springside鼓励单元测试和集成测试,使用JUnit和Mockito等工具,确保代码的健壮性。 在学习...
《SpringSide 3.2.2 源码解析与技术深度探讨》 SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是...
总结起来,SpringSide 3.0 是一个全面的Java开发平台,结合了Spring框架的强大功能和其他优秀开源组件,为开发者提供了一个高效、易用的开发环境。理解并掌握SpringSide 3.0 的核心知识点,对于提升Java企业级应用的...
在SpringSide 3.3中,你可以直接导入这些脚本,快速构建项目的数据库结构和填充初始数据,大大节省了项目启动的时间。 4. **Spring Framework核心概念** SpringSide 3.3基于Spring Framework,因此理解Spring的...
2. **Demo**:示例模块,提供了各种应用场景的实例,帮助开发者快速理解和使用SpringSide的各项功能,包括数据库操作、RESTful API开发、Maven构建等。 3. **Module**:模块化设计,SpringSide提供了多个可复用的子...
- 在传统SSH框架中,实体类和数据库之间的映射主要通过XML文件(如`.hbm.xml`)完成,这使得实体类代码与映射逻辑分离,但同时也增加了维护成本。 #### 2. Entity 对象 **Springside3:** - **实体类:** 在...
SpringSide4参考手册是一份详尽的文档,涵盖了使用SpringSide4.0版本开发应用时可能会用到的各种技术组件和模块。SpringSide是一个开源的Java开发平台,它集成了Spring框架和大量实用的组件,以方便开发人员构建复杂...
同时,SpringSide支持与Jenkins等持续集成工具的集成,实现自动化构建和部署。 九、示例项目 在"springside"这个压缩包文件中,包含了各种示例项目的源码,这些项目覆盖了SpringSide的各个功能点,如基本的CRUD操作...
2. **构建工具**:SpringSide-core-4.1.0使用Maven作为主要的构建工具,提供了一套标准的项目结构和配置,使得项目的构建和部署变得更加简单。 3. **代码生成器**:内含代码生成器工具,可以帮助开发者快速生成常见...
- Mapper:包含 BeanMapper、JaxbMapper 和 JsonMapper,分别用于 Bean 之间的深度转换、XML 与 Java 对象的映射以及 JSON 数据的序列化和反序列化。 - Persistence:包括 DynamicSpecifications、Hibernate 和 ...
### springside3.3.4使用方法与SSH整合详解 #### 一、Springside简介 Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一...
3. **自动化构建工具**:SpringSide通常与Maven或Gradle等自动化构建工具结合使用,以管理项目的依赖关系和构建过程。在4.2.2.GA版本中,可能已经优化了这些集成,确保开发者可以轻松地构建和测试项目。 4. **代码...
在SpringSide中,Hibernate被用来处理数据库交互,通过定义对象实体和映射文件,实现了数据的透明访问。开发者不再需要关注底层的SQL细节,可以专注于业务逻辑的实现。 三、Struts2的MVC模式优雅演绎 Struts2作为...
模型层通常包含业务逻辑和数据处理,SpringSide使用Java Bean作为数据模型,通过Hibernate或MyBatis等持久层框架与数据库交互。控制器层负责接收请求、调用模型并返回响应,SpringSide通过注解驱动的Spring MVC使得...
《SpringSide:全面解析与应用》 SpringSide项目是一个基于Java的开源软件开发框架,它以Spring Framework为核心,旨在提供一套简洁、规范的项目构建和开发实践。在深入理解SpringSide之前,我们首先需要了解Spring...
3. 接着,解压`springside4-4.2.3.GA.zip`,研究其项目结构和配置,了解如何结合Maven和Springside进行开发。 4. 最后,参考`springside+maven(入门).doc`,这是一个针对初学者的Maven和Springside入门教程,将指导...
它使用Hibernate作为持久层框架,与数据库交互,提供了一套完整的ORM解决方案。对于前端,它采用了Bootstrap和jQuery,提供了现代且响应式的用户界面。 总结来说,SpringSide 4.2.3.GA是一个综合性的Java开发框架,...