项目中使用ecTable的代码
来源:互联网 发布:淘宝客单纯做3c产品 编辑:程序博客网 时间:2024/05/17 03:00
这是不配置extremetable.properties的初始样式。
这是配置了extremetable.properties自定义的样式,主要是加了一个页数下拉框,可以选择第几页,每页几行。这个下拉框要加上对应的onchange()方法、action,非常复杂。
项目目录。
-------------------------------------------------------------------------------------------------------------------
ecTable的初步配置很简单。导入jar包。web.xml里面可以指定extremetable.properties。然后配置extremetable.properties。可以不指定,使用默认样式。还有一些image。可以自定义css。我们的css这里不写了,大致是这样:.eXtremeTable .tableRegion ,以.eXtremeTable开头。可以去下载项目。
http://download.csdn.net/detail/u010653311/6453225
web.xml就不贴了。这里没有配置导出报表和国际化。
index.jsp
<%@page contentType="text/html; charset=UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><c:set var="ctx" value="${pageContext.request.contextPath}"/><link href="${ctx}/css/extremecomponents.css" type="text/css" rel="stylesheet" /><link rel="stylesheet" type="text/css" href="${ctx}/css/common.css" /> </head> <body style="padding:0 100px;"> <br/> <div id="TableBody"> <ec:table tableId="adhocSql" items="data" var="map"width="100%" form="EditForm"action="${ctx}/adhocSql/query.action"imagePath="${ctx}/images/extremecomponents/*.gif" view="html"retrieveRowsCallback="limit" autoIncludeParameters="false"><ec:exportXls fileName="adhocSqlList.xls" tooltip="导出Excel" /><ec:row><ec:column property="name" title="姓名" width="10%"/><ec:column property="age" title="年龄" width="10%" /></ec:row></ec:table></div> </body></html>
配置文件:
table.filterable=falsetable.imagePath=/images/extremecomponents/*.giftable.locale=zh_CNtable.view.html=com.huateng.framework.extremecomponents.view.IssueViewexportXls.view=org.extremecomponents.table.view.XlsViewrow.highlightRow=truecolumn.format.date=yyyy/MM/dd/hh/mm/sscolumn.format.currency=###,###,###,###,#00.00table.maxRowsDisplayed=50table.medianRowsDisplayed=20table.rowsDisplayed=10column.cell.OrderState=com.huateng.framework.extremecomponents.cell.CustomerOrderStateCell
这里指定了一个IssueView。自定义样式都是这个类。
column.cell.OrderState是这么用的:jsp里面
<ec:column property="orderStat" cell="OrderState" title="订单状态" width="10%"/>就会找到CustomerOrderStateCell这个类。另外cell=""里面好像可以直接写类和包的全称。
这个类可以把一个输入转为一个输出。Action传过来的实际值比如是1,显示到页面上面可以变为‘草稿’。
public class CustomerOrderStateCell extends AbstractCell {/* (non-Javadoc) * @see org.extremecomponents.table.cell.AbstractCell#getCellValue(org.extremecomponents.table.core.TableModel, org.extremecomponents.table.bean.Column) */@SuppressWarnings("unchecked")@Overrideprotected String getCellValue(TableModel model, Column column) {List<DictInfoDTO> list = (List<DictInfoDTO>)SystemInfo.getDictInfo().get(SystemInfoConstants.CUSTOMER_ORDER_STATE);String value = column.getValueAsString();if (StringUtils.isBlank(value))return "";for (DictInfoDTO d : list) {if (value.equals(String.valueOf(d.getDictId()))) {value = d.getDictShortName();break;}}return value;}}
这个类比较简单。
再看IssueView
package com.huateng.framework.extremecomponents.view;import org.extremecomponents.table.core.TableModel;import org.extremecomponents.table.view.CompactView;import org.extremecomponents.util.HtmlBuilder;import com.huateng.framework.extremecomponents.toolbar.IssueToolbar;public class IssueView extends CompactView { protected void toolbar(HtmlBuilder html, TableModel model) { new IssueToolbar(html, model).layout(); }}
IssueToolBar:
package com.huateng.framework.extremecomponents.toolbar;import java.util.Iterator;import org.extremecomponents.table.bean.Export;import org.extremecomponents.table.core.TableModel;import org.extremecomponents.table.view.CompactToolbar;import org.extremecomponents.table.view.html.BuilderConstants;import org.extremecomponents.table.view.html.BuilderUtils;import org.extremecomponents.util.HtmlBuilder;public class IssueToolbar extends CompactToolbar { public IssueToolbar(HtmlBuilder html, TableModel model) {super(html, model); } protected void columnRight(HtmlBuilder html, TableModel model) { boolean filterable = BuilderUtils.filterable(model); boolean showPagination = BuilderUtils.showPagination(model); boolean showExports = BuilderUtils.showExports(model); IssueToolbarBuilder toolbarBuilder = new IssueToolbarBuilder(html, model); html.td(4).styleClass(BuilderConstants.COMPACT_TOOLBAR_CSS).align("right").close(); html.table(4).border("0").cellPadding("1").cellSpacing("2").close(); html.tr(5).close(); if (showPagination) { html.td(5).close(); toolbarBuilder.firstPageItemAsImage(); html.tdEnd(); html.td(5).close(); toolbarBuilder.prevPageItemAsImage(); html.tdEnd(); html.td(5).close(); toolbarBuilder.nextPageItemAsImage(); html.tdEnd(); html.td(5).close(); toolbarBuilder.lastPageItemAsImage(); html.tdEnd(); html.td(5).close(); toolbarBuilder.separator(); html.tdEnd(); html.td(5).close(); toolbarBuilder.rowsDisplayedDroplist(); html.tdEnd(); if (showExports) { html.td(5).close(); toolbarBuilder.separator(); html.tdEnd(); } } if (showExports) { Iterator iterator = model.getExportHandler().getExports().iterator(); for (Iterator iter = iterator; iter.hasNext();) { html.td(5).close(); Export export = (Export) iter.next(); toolbarBuilder.exportItemAsImage(export); html.tdEnd(); } } if (filterable) { if (showExports || showPagination) { html.td(5).close(); toolbarBuilder.separator(); html.tdEnd(); } html.td(5).close(); toolbarBuilder.filterItemAsImage(); html.tdEnd(); html.td(5).close(); toolbarBuilder.clearItemAsImage(); html.tdEnd(); } html.trEnd(5); html.tableEnd(4); html.tdEnd(); }}
IssueToolbarBuilder:
package com.huateng.framework.extremecomponents.toolbar;import org.extremecomponents.table.core.TableConstants;import org.extremecomponents.table.core.TableModel;import org.extremecomponents.table.view.html.TableActions;import org.extremecomponents.table.view.html.ToolbarBuilder;import org.extremecomponents.util.HtmlBuilder;import com.huateng.framework.extremecomponents.tableaction.IssueTableActions;public class IssueToolbarBuilder extends ToolbarBuilder { private static String pathString="/EcTableWeb"; public IssueToolbarBuilder(HtmlBuilder html, TableModel model) {super(html, model); } public void rowsDisplayedDroplist() {int rowsDisplayed = getTableModel().getTableHandler().getTable().getRowsDisplayed();int medianRowsDisplayed = getTableModel().getTableHandler().getTable().getMedianRowsDisplayed();int maxRowsDisplayed = getTableModel().getTableHandler().getTable().getMaxRowsDisplayed();int currentRowsDisplayed = getTableModel().getLimit().getCurrentRowsDisplayed();//System.out.println(rowsDisplayed+","+medianRowsDisplayed+","+maxRowsDisplayed+","+currentRowsDisplayed);//10,20,50,10//显示页数的下拉框getHtmlBuilder().table(0).close().tr(4).close().td(8).style(" padding:0 0 0 4px;").close();int currentPage = getTableModel().getLimit().getPage();int totalRows = getTableModel().getLimit().getTotalRows();int totalPages = 1;if (totalRows % currentRowsDisplayed > 0) { totalPages = totalRows / currentRowsDisplayed + 1;} else { totalPages = totalRows / currentRowsDisplayed;}getHtmlBuilder().select().name(getTableModel().getTableHandler().prefixWithTableId()+ TableConstants.PAGE_SCOPE);StringBuffer onchangePage = new StringBuffer();onchangePage.append(new IssueTableActions(getTableModel()).getPagesDisplayedAction());getHtmlBuilder().onchange(onchangePage.toString());getHtmlBuilder().close();getHtmlBuilder().newline();getHtmlBuilder().tabs(4);for (int i = 1; i <= totalPages; i++) { getHtmlBuilder().option().value(String.valueOf(i)); if (i == currentPage) {getHtmlBuilder().selected(); } getHtmlBuilder().close(); getHtmlBuilder().append(String.valueOf(i)); getHtmlBuilder().optionEnd();}getHtmlBuilder().newline();getHtmlBuilder().tabs(4);getHtmlBuilder().selectEnd();//getHtmlBuilder().br();//getHtmlBuilder().img("images/extremecomponents/rowsDisplayed.gif");//getHtmlBuilder().nbsp();// 显示条数的下拉框getHtmlBuilder().tdEnd().td(8).style(" padding:0 0 0 4px;").close();getHtmlBuilder().select().name(getTableModel().getTableHandler().prefixWithTableId()+ TableConstants.ROWS_DISPLAYED);StringBuffer onchange = new StringBuffer();onchange.append(new TableActions(getTableModel()).getRowsDisplayedAction());getHtmlBuilder().onchange(onchange.toString());getHtmlBuilder().close();getHtmlBuilder().newline();getHtmlBuilder().tabs(4);// default rowsgetHtmlBuilder().option().value(String.valueOf(rowsDisplayed));if (currentRowsDisplayed == rowsDisplayed) { getHtmlBuilder().selected();}getHtmlBuilder().close();getHtmlBuilder().append(String.valueOf(rowsDisplayed));getHtmlBuilder().optionEnd();// median rowsgetHtmlBuilder().option().value(String.valueOf(medianRowsDisplayed));if (currentRowsDisplayed == medianRowsDisplayed) { getHtmlBuilder().selected();}getHtmlBuilder().close();getHtmlBuilder().append(String.valueOf(medianRowsDisplayed));getHtmlBuilder().optionEnd();// max rowsgetHtmlBuilder().option().value(String.valueOf(maxRowsDisplayed));if (currentRowsDisplayed == maxRowsDisplayed) { getHtmlBuilder().selected();}getHtmlBuilder().close();getHtmlBuilder().append(String.valueOf(maxRowsDisplayed));getHtmlBuilder().optionEnd();getHtmlBuilder().newline();getHtmlBuilder().tabs(4);getHtmlBuilder().selectEnd();getHtmlBuilder().tdEnd().trEnd(4);getHtmlBuilder().tr(4).close().td(8).close();getHtmlBuilder().img(pathString+"/images/extremecomponents/rowsDisplayed.gif");getHtmlBuilder().tdEnd().td(8).close();getHtmlBuilder().img(pathString+"/images/extremecomponents/table/rowsDisplayed.gif");getHtmlBuilder().tdEnd().trEnd(4).tableEnd(0); }}
用来指定onchange() Action的IssueTableActions:
package com.huateng.framework.extremecomponents.tableaction;import org.apache.commons.lang.StringUtils;import org.extremecomponents.table.core.TableConstants;import org.extremecomponents.table.core.TableModel;import org.extremecomponents.table.view.html.BuilderUtils;import org.extremecomponents.table.view.html.TableActions;/** * 扩展TableActions,使原来页面中下拉框由显示行数变为显示页敄1�7 * 这里完成了下拉框中js语句onchenge()的实玄1�7 * @author liming.feng * */public class IssueTableActions extends TableActions {private TableModel model;public IssueTableActions(TableModel model) {super(model);this.model = model;}/** * 构建页面控件“翻页下拉框”的js中onchenge()语句 * @return String */ public String getPagesDisplayedAction() { StringBuffer action = new StringBuffer("javascript:"); action.append(getClearedExportTableIdParameters()); action.append(getRowsDisplayedFormParameter(TableConstants.PAGE)); action.append(getOnInvokeOrSubmitAction()); return action.toString(); } /* * Added 16 AUG 2007 - Todd Fredrich - To duplicate previous functionality of getOnInvokeAction(). */ public String getOnInvokeOrSubmitAction() { String onInvokeAction = getOnInvokeAction(); if (StringUtils.isNotBlank(onInvokeAction)) { return onInvokeAction; } return getSubmitAction(); } public String getSubmitAction() { StringBuffer result = new StringBuffer(); String form = BuilderUtils.getForm(model); String action = model.getTableHandler().getTable().getAction(); result.append("document.forms.").append(form).append(".setAttribute('action','").append(action).append("');"); String method = model.getTableHandler().getTable().getMethod(); result.append("document.forms.").append(form).append(".setAttribute('method','").append(method).append("');"); result.append("document.forms.").append(form).append(".submit()"); return result.toString(); } }
说几点细节:比如getHtmlBuilder().table(0).close().tr(4).close().td(8)
close()方法是加上‘>’符号,tr(4)里面的数字没有实际意义,如果system.out打印出来发现那里是缩进了几格。这个htmlBuilder就是像手写html代码一样。可以直接打印看字符串。
另外带上Action
package com.huateng.action;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class DataInitAction {private List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();private int totalRows = 0;public String init(){Map<String, Object> map = new HashMap<String, Object>();map.put("name", "tommy");map.put("age", 22);data.add(map);map = new HashMap<String, Object>();map.put("name", "jerry");map.put("age", 33);data.add(map);totalRows = data.size();return "succ";}public List<Map<String, Object>> getData() {return data;}public void setData(List<Map<String, Object>> data) {this.data = data;}public int getTotalRows() {return totalRows;}public void setTotalRows(int totalRows) {this.totalRows = totalRows;}}
这里没连数据库,翻页什么都做不了。
实际中Action中还有一个方法取得页面页数等数据,是这样的:
/** * list列表页面初始化获得页数等信息 * * @param request * @param response * @return * @throws Exception */ protected void ListPageInit(String tableId, PageQueryDTO pageQueryDTO) throws Exception { if (pageQueryDTO == null) return; if (tableId != null) this.tableId = tableId; HttpServletRequest request = getRequest(); Limit limit = getLimit(request, tableId); pageQueryDTO.setCurrentPage(limit.getPage()); pageQueryDTO.setRowsDisplayed(getRowsDisplayed(request, tableId)); pageQueryDTO.setQueryAll(this.isExportView(request, tableId)); // 是否有排序,如果有,记录排序的字段名、字段别名和排序的种类(降序or升序) if (limit.getSort() != null) { // 排序的种类 pageQueryDTO.setSort(limit.getSort().getSortOrder()); if (TableConstants.SORT_ASC.equals(limit.getSort().getSortOrder()) || TableConstants.SORT_DESC.equals(limit.getSort().getSortOrder())) { // 排序的字段名 pageQueryDTO.setSortFieldName(limit.getSort().getProperty()); // 排序的字段别名 pageQueryDTO.setSortFieldAliasName(limit.getSort().getAlias()); } } }
/** * 得到ec分页、排序、索引用的Limit * * @param request * @return */ protected Limit getLimit(HttpServletRequest request, String tableId) { if (tableId == null) tableId = "ec"; Context context = new HttpServletRequestContext(request); LimitFactory limitFactory = new TableLimitFactory(context, tableId); Limit limit = new TableLimit(limitFactory); return limit; }
/** * 得到每页的页数 * * @param request * @return */ protected int getRowsDisplayed(HttpServletRequest request, String tableId) { if (tableId == null) tableId = "ec"; Context context = new HttpServletRequestContext(request); String rowsDisplayed = String.valueOf(getLimit(request, tableId).getCurrentRowsDisplayed()); Preferences preferences = new TableProperties(); preferences.init(context, TableModelUtils.getPreferencesLocation(context)); if ("0".equals(rowsDisplayed)) { Object rd = request.getParameterMap().get(tableId + "_" + TableConstants.ROWS_DISPLAYED); if (rd != null) { rowsDisplayed = ((String[]) rd)[0]; } else { rowsDisplayed = preferences.getPreference(PreferencesConstants.TABLE_ROWS_DISPLAYED); } } return Integer.parseInt(rowsDisplayed); }
/** * 判断是否是导出操作 * * @param request * @return */ protected boolean isExportView(HttpServletRequest request, String tableId) { if (tableId == null) tableId = "ec"; Object rd = request.getParameterMap().get(TableConstants.EXPORT_TABLE_ID); if (rd != null) { String ex = ((String[]) rd)[0]; return StringUtils.isNotBlank(ex); } return false; }
下载位置http://download.csdn.net/detail/u010653311/6453225
- 项目中使用ecTable的代码
- access数据库的使用,直接贴项目中使用代码
- 在项目中简单使用枚举的示例代码
- Unity项目中使用Git管理代码的设置步骤
- JS代码中使用项目路径的方法
- 项目中常用的代码
- Log4j的isdebugEnabled的作用 从isdebugEnabled使用 思考项目中代码的效率
- Android中Popuwindown的使用(我的项目中扣出的代码)
- C#如何在项目的代码中使用图片文件资源
- Android项目中使用javacv和javacpp的代码混淆配置
- 在一个项目中同时使用Swift和Objective-C代码混合编程的方法
- mac电脑-wex5项目中配合使用studio自带的svn管理代码
- 自己在平时项目中所使用到的JS代码
- Qomo项目中代码的一般性约定
- Qomo项目中代码的一般性约定
- Eclipse中格式化整个项目的代码
- php项目中代码的调试问题
- 查看项目中有问题的代码
- 如何在maven工程中加载oracle驱动
- Oracle 11g RAC+DG项目实战-视频分享
- strtok()和strtok_r()
- c#的字符解析简单示例
- [MySQL 5.6] MySQL 5.6 online ddl 使用、测试及关键函数栈
- 项目中使用ecTable的代码
- 表格嵌套的边框处理
- CButtonST类简介
- 在IBM AIX p750小机上为Oracle扩展逻辑卷-视频分享
- struts1和struts2的区别详解
- adb shell 读取以及cmd赋值的用法记录
- oracle之修改已经定义好的表、列信息
- RAC生产库现场调整备份策略实战-视频分享
- 组合数学引论 第一章 答案 6-10