`
gegewuqin9
  • 浏览: 29161 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

EasyUI datagrid与struts对接的数据模型

阅读更多
jquery的easyUI里的datagrid是erp系统中常用到的表格展示工具,在java项目中,我使用struts与jquery的前台页面程序进行数据交互,由于easyUI中有一些固定名称的变量,于是我便想做一个数据模型方便进行使用。主要是在继承的Action中加入一些固定的变量,Action程序如下:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionSupport;

import net.sf.json.JSONObject;

/**
 * 封装了与easyUI datagrid对接的数据模型<br/>
 * 1:返回数据中不允许有null的value,所以对null进行了转化(转化为空字符)<br/>
 * 2:对数据中以time结尾的字段的时间格式进行了转化(默认将unix时间转为yyyy-MM-dd HH:mm:ss)
 */
public class BaseViewAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	private JSONObject resultObj;
	public int page;
	public int rows;
	public String sort;
	public String order;
	private int total;
	private String time_pattern = "yyyy-MM-dd HH:mm:ss";
	private List<Map<String, Object>> dataList;
	public JSONObject getResultObj() {
		for(Map<String, Object> data : dataList) {
			for(Map.Entry<String, Object> entry : data.entrySet()) {
				String key = entry.getKey();
				// datagrid中不允许出现值为null的字段,在这里进行转化
				if(entry.getValue() == null) {
					data.put(key, "");
				}
				if(key.endsWith("time")) {
					data.put(key, getTimeVal(entry.getValue().toString()));
				}
			}
		}
		Map<String, Object> parameter = new HashMap<String, Object>();
		parameter.put("total", total);
		parameter.put("rows", dataList);
		resultObj =JSONObject.fromObject(parameter);
		return resultObj;
	}
	
	private static Pattern pattern = Pattern.compile("^[1-9][0-9]{9}$");
	SimpleDateFormat sdf = new SimpleDateFormat(time_pattern);
	/**
	 * 由于数据库中的时间格式是unix时间,所以转化为用户可视的时间格式
	 * @param unix时间字符串
	 */
	private String getTimeVal(String value) {
		if("0".equals(value))
			return "";
		if(!pattern.matcher(value).find())
			return value;
		long time = Long.valueOf(value);
		return sdf.format(new Date(time*1000L));
	}
	
	public void setResultObj(JSONObject resultObj) {
		this.resultObj = resultObj;
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getRows() {
		return rows;
	}
	public void setRows(int rows) {
		this.rows = rows;
	}
	public String getSort() {
		return sort;
	}
	public void setSort(String sort) {
		this.sort = sort;
	}
	public String getOrder() {
		return order;
	}
	public void setOrder(String order) {
		this.order = order;
	}
	public void setDataList(List<Map<String, Object>> dataList) {
		this.dataList = dataList;
	}
	public void setTotal(int total) {
		this.total = total;
	}
	public String getTime_pattern() {
		return time_pattern;
	}
	/**
	 * 这里允许改变时间字段返回的格式
	 * @param time_pattern 默认yyyy-MM-dd HH:mm:ss
	 */
	public void setTime_pattern(String time_pattern) {
		this.time_pattern = time_pattern;
	}
	
}


在实际应用中,我们需要在Action中继承此Action,实用(实际应用)代码如下:
1.Action代码
public class ManagerViewAction extends BaseViewAction{

	private static final long serialVersionUID = 1L;
	private Map<String, Object> filters = new HashMap<String, Object>();
	
	public void setName(String name) {
		this.filters.put("name", name);
	}

	public void setType(String type) {
		this.filters.put("type", type);
	}
	
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
	
	public String dataList() throws Exception {
		BaseManagerServiceI service = (BaseManagerServiceI)SpringManager.getBean(BaseManagerServiceI.class.getName());
		List<Map<String, Object>> dataList = service.queryDataList(page, rows, sort, order, filters);
		int totalNum = service.queryDataCount(filters);
		/** 主要是下面的2行代码,这里需要设置返回的数据以及总行数 */
		this.setDataList(dataList);
		this.setTotal(totalNum);
		return SUCCESS;
	}
}


2.struts.xml配置:
<package name="json" extends="json-default">
	   <action name="ManagerViewAction" class="app.order.action.ManagerViewAction">
            <result type="json">
                <param name="root">resultObj</param>
            </result>
        </action>
	</package>


3.前台:
$(function(){
	            $("input[type=button]").button();
	            var xx = top.document.getElementById('result');
	            curGridObj = $('#dataList').datagrid({
	                title:'基础管理',
	                width:$("#content").width()-2,
	                height:$(xx).height()-60,
	                nowrap: false,
	                striped: true,
	                url:'/ManagerViewAction!dataList.do',
	                sortName: 'add_time',
	                sortOrder: 'desc',
	                idField:'id',
	                pagination:true,
	                pageSize:15,
	                pageNumber:1,
	                pageList:[15,20,30],
	                loadMsg:'正在加载数据......',
	                columns:[[
                            {title:'id',field:'id',hidden:true},
	                        {title:'列1',field:'column1',width:60,align:'center'},
	                        {title:'列2',field:'column2',width:150,align:'center',sortable:true},
	                        {title:'列3',field:'column3',width:150,align:'center',sortable:true},
	                    ]],
	                rownumbers:true,
	                toolbar:[]
	            });
	            var p = $('#dataList').datagrid('getPager');  
	            p.pagination({  
	                pageSize:15,
	                pageList:[15,20,30],
	                beforePageText: '第',
	                afterPageText: '页    共 {pages} 页',  
	                displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录'  
	            });  
            });


<body style="font-size:9pt;margin:0;overflow:hidden;">
        <table id="content" width="100%" cellspacing="0" cellpadding="3">
            <tr>
                <td colspan="6">
                    <table id="dataList" style="width:100%;"></table>
                </td>
            </tr>
        </table>
    </body>



以上代码是根据项目中的更改后的,如不能直接运行,请调试,另外别忘了加入
struts-json的lib包
0
2
分享到:
评论
1 楼 houyujiangjun 2013-09-17  
封装的不够.  这玩意儿只是一个简单的ajax请求.easyUI的前台分页json 格式很固定,应该高度封装.

相关推荐

    JS EasyUI DataGrid动态加载数据

    JS EasyUI DataGrid是一款基于jQuery和EasyUI框架的数据表格组件,它提供了丰富的功能,如数据分页、排序、过滤和自定义操作等。在实际应用中,动态加载数据是DataGrid的一个重要特性,允许用户在需要时加载更多的...

    easyui datagrid 数据导出到Excel

    在IT行业中,EasyUI Datagrid是一款基于jQuery的前端数据展示组件,它提供了丰富的表格功能,如排序、分页、过滤等。在实际工作中,我们经常需要将这些展示的数据导出到Excel文件,以便进行进一步的分析或存储。下面...

    easyui datagrid 表格 打印

    在IT领域,EasyUI Datagrid是一款基于jQuery的前端数据展示组件,它提供了丰富的表格功能,如数据分页、排序、筛选等。当我们需要将Datagrid中的数据进行打印时,可能会遇到一些挑战,因为通常默认的浏览器打印功能...

    扩展 jQuery EasyUI Datagrid 数据行鼠标悬停离开事件完整版Demo下载

    jQuery EasyUI Datagrid 用户列表鼠标悬停/离开数据行时显示人员头像(onMouseOver/onMouseOut) Demo 扩展 jQuery EasyUI Datagrid 数据行鼠标悬停离开事件,源码奉献!!!

    EasyUI DataGrid过滤用法实例

    在这个"EasyUI DataGrid 过滤用法实例"中,我们将深入探讨如何利用 EasyUI 的 DataGrid 组件实现数据过滤功能,帮助用户更高效地查找和管理表格中的信息。 首先,`datagrid-filter.js` 文件很可能包含了实现过滤...

    解决EasyUIdataGrid列比较多,无数据,列展现不全

    ### 解决EasyUI dataGrid列较多时无数据显示不全的问题 在使用EasyUI框架进行前端开发的过程中,可能会遇到dataGrid组件在数据为空时列显示不完整的问题。这不仅影响用户体验,也降低了系统的可用性。本文将详细...

    easyui datagrid中实现上下左右、回车切换单元格

    easyui datagrid中实现上下左右、回车切换单元格easyui datagrid中实现上下左右、回车切换单元格easyui datagrid中实现上下左右、回车切换单元格

    easyui datagrid 右冻结

    EasyUI是一个基于jQuery的UI库,提供了丰富的组件,包括datagrid,它是一个用于展示表格数据的组件。在某些场景下,用户可能希望在滚动表格时,某些重要的列(通常是标题或标识列)始终保持可见,这就是“右冻结”的...

    easyui datagrid 增加鼠标悬停弹窗事件

    EasyUI的Datagrid是一个强大的表格组件,它可以显示大量数据并支持排序、分页、过滤和编辑等功能。在Web应用中,Datagrid常用于展示结构化的数据,使用户能够高效地浏览和操作信息。 2. **鼠标悬停事件**: 在...

    easyui datagrid在编辑状态下更新列的值

    在使用EasyUI框架开发Web应用时,Datagrid组件是一个非常重要的元素,它提供了一种方便的方式来展示和操作数据。在标题“easyui datagrid在编辑状态下更新列的值”中,我们关注的是如何在Datagrid的编辑模式下动态地...

    easyui datagrid editor回车切换单元格示例,可参考

    easyui datagrid editor回车切换单元格示例,适合熟悉easyui但又不懂如何做的人员,可能参考一下源码JS。

    easyUI datagrid rownumber自适应宽度扩展JS

    easyUI datagrid 自动调整行号大小

    easyui datagrid 分页查询样例

    在本项目中,"easyui datagrid 分页查询样例"是利用EasyUI Datagrid与后端SpringMVC框架集成,实现数据的后台分页查询功能。下面将详细阐述这一知识点。 首先,EasyUI Datagrid的核心在于其强大的数据绑定能力,它...

    jquery easyui datagrid demo

    通过阅读这份文档,我们可以了解 Datagrid 的基本配置和高级特性,以及如何与后端数据源进行交互。 `jquery-easyui-document.chm` 是 jQuery EasyUI 的官方帮助文档,通常包含了完整的 API 参考、示例代码和使用...

    EasyUI Datagrid 中文排序的问题

    默认情况下,EasyUI Datagrid 支持基本的数据排序功能,但其默认排序逻辑是基于字符编码的,因此无法直接实现中文按拼音顺序的排序。 #### 三、前端解决方案 对于前端来说,可以通过自定义排序函数的方式来实现中文...

    easyui datagrid 多条件筛选 可复选 类似淘宝筛选

    首先,`datagrid`是EasyUI中的一个核心组件,它用于展示数据表格,支持分页、排序、过滤等多种操作。在实现多条件筛选时,我们需要对datagrid的`columns`属性进行配置,定义每一列的显示方式和筛选条件。例如,我们...

    Easyui Datagrid 实现行过滤[模糊查询]

    在IT领域,尤其是在Web开发中,EasyUI是一个广泛使用的JavaScript框架,它基于jQuery,提供了丰富的UI组件,如Datagrid,用于构建数据展示和管理的表格。在本篇中,我们将深入探讨如何在EasyUI的Datagrid中实现行...

    easyui的datagrid的数据渲染

    easyui的datagrid的数据渲染

    easyui datagrid 导出到excel

    在IT领域,EasyUI Datagrid是一款基于jQuery的前端数据展示组件,它提供了丰富的表格功能,如排序、分页、过滤等。"EasyUI Datagrid 导出到Excel"这一主题涉及的是如何将EasyUI Datagrid中的数据显示在Excel表格中,...

    easyUI datagrid打印

    easyUI datagrid的打印,datagrid先查询出数据,然后调用html文件做简单的报表打印。IE,Chrome,360浏览器都适用

Global site tag (gtag.js) - Google Analytics