`
zhengjj_2009
  • 浏览: 153607 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

YUI2.8 实现datasource datatable panel的综合应用,实时刷新数据

阅读更多

走了好长一段时间的弯路,终于实现了使用YUI2.8 实现datasource datatable panel的综合应用的例子,现在把它记录下来,作为以后的例子可以参考。

后台的程序

1、BaseStruts2Action的源代码:

package com.demo.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("all")
public class BaseStruts2Action  extends ActionSupport {

	private static final long serialVersionUID = -7098181898244016914L;
	
	public HttpServletRequest getRequest() {
		return ServletActionContext.getRequest();
	}
	public HttpServletResponse getResponse() {
		return ServletActionContext.getResponse();
	}

	public void outJsonString(String str) {
		getResponse().setContentType("text/javascript;charset=UTF-8");
		outString(str);
	}

	public void outJson(Object obj) {
		String str = JSONObject.fromObject(obj).toString();
		System.out.println("str="+str);
		outJsonString(str);
	}

	public void outJsonArray(Object array) {
		outJsonString(JSONArray.fromObject(array).toString());		
	}

	public void outString(String str) {
		try {
			//禁止缓存json数据
			HttpServletResponse response = getResponse();
			response.setHeader("Pragma", "no-cache"); 
			response.setHeader("Cache-Control", "no-cache"); 
			response.setHeader("Expires", "0"); 
			response.setCharacterEncoding("UTF-8");
			response.setContentType("application/json;charset=UTF-8");
			PrintWriter writer = response.getWriter();
			writer.write(str);
			writer.flush();
			writer.close();			
		} catch (IOException e) {
		}
	}

	public void outXMLString(String xmlStr) {
		getResponse().setContentType("application/xml;charset=UTF-8");
		outString(xmlStr);
	}
	
	protected String postData;

	protected int recordsReturned;
	protected int totalRecords;
	protected int startIndex;
	protected String sort;   
	protected String dir; 
	protected List records;
	protected int pageSize;
	
	public int getRecordsReturned() {
		return recordsReturned;
	}

	public void setRecordsReturned(int recordsReturned) {
		this.recordsReturned = recordsReturned;
	}

	public int getTotalRecords() {
		return totalRecords;
	}

	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}

	public int getStartIndex() {
		return startIndex;
	}

	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}

	public String getSort() {
		return sort;
	}

	public void setSort(String sort) {
		this.sort = sort;
	}

	public String getDir() {
		return dir;
	}

	public void setDir(String dir) {
		this.dir = dir;
	}

	public List getRecords() {
		return records;
	}

	public void setRecords(List records) {
		this.records = records;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	
	public String getPostData() {
		return postData;
	}

	public void setPostData(String postData) {
		this.postData = postData;
	}

}

 

 

2、UserAction的源代码

package com.demo.action;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONObject;

import com.demo.model.Book;
import com.demo.model.InstBean;
import com.demo.model.User;
import com.demo.service.IBookService;
import com.demo.service.IUserService;
import com.demo.yuiutil.JSONResult;
import com.demo.yuiutil.YUIPagination;

@SuppressWarnings("all")
public class UserAction extends BaseStruts2Action{
	private IUserService userService;
	private User user;

	public String saveUser(){
		userService.saveUser(user);
		System.out.println("saveUser() has done.... ");
		return SUCCESS;
	}
	
	public void getUserList(){
		if( startIndex< 0 ){
			startIndex = 0;
		}
		if( pageSize<= 0 ){
			pageSize = 10;
		}
		System.out.println(" getUserList: startIndex="+startIndex+";pageSize="+pageSize);
		YUIPagination yuiPage = userService.getUserPagenation(startIndex, pageSize);			
		this.outJson(yuiPage);
	}
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}

	public IUserService getUserService() {
		return userService;
	}

	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
}

 

 

3、YUIPagination的源代码

package com.demo.yuiutil;

import java.util.List;
@SuppressWarnings("all")
public class YUIPagination {
	private int recordsReturned;
	private int totalRecords;
	private int startIndex;
	private String sort;   
	private String dir; 
	private List records;
	private int pageSize;
	
	public int getRecordsReturned() {
		return recordsReturned;
	}
	public void setRecordsReturned(int recordsReturned) {
		this.recordsReturned = recordsReturned;
	}
	public int getTotalRecords() {
		return totalRecords;
	}
	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}
	public int getStartIndex() {
		return startIndex;
	}
	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}
	public String getSort() {
		return sort;
	}
	public void setSort(String sort) {
		this.sort = sort;
	}
	public String getDir() {
		return dir;
	}
	public void setDir(String dir) {
		this.dir = dir;
	}
	public List getRecords() {
		return records;
	}
	public void setRecords(List records) {
		this.records = records;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
}

 

 

4、User  IUserService  UserServiceImpl   IUserDao UserDaoImpl就是基本的java程序,我就不沾出来了。

 

5、struts的配置文件

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<include file="struts-default.xml"/>
	<constant name="struts.objectFactory" value="spring" />
	
	<package name="yuiapp" namespace="/yuiapp" extends="struts-default">
		<action name="user_*" method="{1}" class="com.demo.action.UserAction">
		    <result name="success">/pages/datatable/success.jsp</result>
		    <result name="input">/pages/datatable/addUser.jsp</result>
		</action>		
	</package>
	
</struts>

 

 

前台的程序

1、listUser.jsp (/yuiapp/WebRoot/pages/datatable/listUser.jsp)

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<%String sysPath =basePath+"appjs/yui/build"; %>
<%
    response.setHeader("Pragma","No-cache"); 
    response.setHeader("Cache-Control","no-cache"); 
    response.setDateHeader("Expires", 0); 
    response.flushBuffer();
    
    Cookie killMyCookie = new Cookie("mycookie", null);   
    killMyCookie.setMaxAge(0);   
    killMyCookie.setPath("/");   
    response.addCookie(killMyCookie);  
%> 
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
<meta HTTP-EQUIV="Expires" CONTENT="0">

<title>list user</title>
<style type="text/css"> 
/*margin and padding on body element
  can introduce errors in determining
  element position and are not recommended;
  we turn them off as a foundation for YUI
  CSS treatments. */
body {
	margin:0;
	padding:0;
}
</style>

<link rel="stylesheet" type="text/css" href="<%=sysPath %>/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="<%=sysPath %>/paginator/assets/skins/sam/paginator.css" />
<link rel="stylesheet" type="text/css" href="<%=sysPath %>/datatable/assets/skins/sam/datatable.css" />
<link rel="stylesheet" type="text/css" href="<%=sysPath %>/container/assets/skins/sam/container.css" />

<script type="text/javascript" src="<%=sysPath %>/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="<%=sysPath %>/connection/connection-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/json/json-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/element/element-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/paginator/paginator-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/datasource/datasource-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/datatable/datatable-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/dragdrop/dragdrop-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/container/container-min.js"></script>
<script type="text/javascript" src="<%=sysPath %>/editor/editor-min.js"></script>



<!--begin custom header content for this example-->
<style type="text/css"> 
/* custom styles for this example */
.yui-skin-sam .yui-dt-liner { white-space:nowrap; } 
</style>

</head>
<body class="yui-skin-sam">
<div class="exampleIntro">
	<p>实现的功能:从前端发送查询请求,后端处理请求,返回JSON数据,在前台展示</p>			
</div>

<input onclick="addUser();" type="button" value="增加" />
<div id="container">
   <div id="datatableId"></div>	
</div>
<div id="dt-pag-nav"></div>
<div id="addPanelId"></div>
<script type="text/javascript"> 
YuiUser = function() {   
	
    var myPaginator;	
    
	this.reloadDT = function(){
		myPaginator.fireEvent('changeRequest',myPaginator.getState({'page':myPaginator.getCurrentPage()}));
	};

	this.initDataTable = function(){
		// Column definitions
	    var myColumnDefs = [
	            {key:"id"},
	            {key:"loginName"},
	            {key:"userName"}
	    ];
	    
	    var myDataSource = new YAHOO.util.DataSource("http://127.0.0.1:8080/yuiapp/yuiapp/user_getUserList.action?");
	    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	    myDataSource.responseSchema = {
	        resultsList: "records",
	        fields: [
	            {key:"id"},
	            {key:"loginName"},
	            {key:"userName"}        
	        ],
	        metaFields: {
	            totalRecords: "totalRecords" // Access to value in the server response
	        }
	    };
	    
	    // DataTable configuration
	    myPaginator = new YAHOO.widget.Paginator( {   
	    	firstPageLinkLabel : "第一页", 
            lastPageLinkLabel : "最后页", 
            previousPageLinkLabel:"上一页",
            nextPageLinkLabel:"下一页",
            rowsPerPage:15,
	        containers : ["dt-pag-nav"],
	        pageReportTemplate : "查询到{totalRecords}条记录"
		});
	    var myConfigs = {
    		MSG_EMPTY : "没有信息",
	    	MSG_ERROR : "查询错误",
	    	MSG_LOADING : "正在查询,请稍候...",
	        initialRequest: "startIndex=0&pageSize=10",
	        dynamicData: true,
	        paginator: myPaginator
	    };
	    
	    // DataTable instance
	    
	    var myDataTable = new YAHOO.widget.DataTable("datatableId", myColumnDefs, myDataSource, myConfigs);
	    
	    // Update totalRecords on the fly with value from server
	    myDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
	        oPayload.totalRecords = oResponse.meta.totalRecords;
	        return oPayload;
	    };
	};// end for initDataTable()	

};

yuiUser = new YuiUser();
yuiUser.initDataTable();

var addPanel;
function addUser(){	
	addPanelId.style.display="";
	addPanel = new YAHOO.widget.Panel("addPanelId", {width:"400px",height:"200px",modal:true,visible:true, draggable:true, close:true } );
	addPanel.setHeader("增加用户");
	addPanel.setBody("<iframe src='addUser.jsp' style='width:350px;height:150px;' frameborder='0' id='addPanelFrame' name='addPanelFrame'></iframe>");
	addPanel.render();
	//addPanel.center();
}

function closeBox(){
	alert("操作成功!");
	addPanel.hide();
	addPanelId.style.display="none";
	//addPanel.destroy();
	//updateNewsBox.destroy();
	yuiUser.reloadDT();
}

</script>

</body>
</html>

 

 

2、addUser.jsp (/yuiapp/WebRoot/pages/datatable/addUser.jsp)

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE html PUBLIC "-//W 3C //DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>add_user</title> 
</head>
<body>
<s:form action="/yuiapp/user_saveUser.action" method="post"> 
    <s:textfield name="user.loginName" label="登录名"/>
    <s:textfield name="user.userName" label="姓名"/> 
    <s:submit/>
</s:form>
</body>
</html>

 

3、success.jsp(/yuiapp/WebRoot/pages/datatable/success.jsp)

 

<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<center>操作成功</center>
<script type="text/javascript">
		window.parent.closeBox();
</script>
</body>

 

  • 大小: 37.5 KB
分享到:
评论

相关推荐

    YUI2.8 实现datatable从server端动态获取数据,并实现分页功能(下)

    在本教程中,我们将深入探讨如何使用Yahoo User Interface (YUI) 2.8 版本来实现一个从服务器端动态获取数据并具备分页功能的DataTable。YUI 是一个强大的JavaScript库,提供了丰富的组件和工具,用于创建交互式和...

    JavaScript YUI 2.8: DataTable jquery form 异步请求显示数据分页

    综上所述,通过结合使用 JavaScript YUI 2.8 的 DataTable 和 jQuery form 插件,我们可以创建一个动态、交互式的表格,能够异步请求数据并实现分页功能。在实际项目中,还需要注意性能优化,比如使用服务器端分页...

    使用YUI2.8 实现多选 ,支持Ctrl 和Shift

    使用YUI2.8 仿照JQuery UI 的select插件写的一个函数 详情见我的博客http://hi.baidu.com/hjzheng

    使用YUI2.8 实现多个LI拖拽

    这是对YUI拖拽例子的改编,大家可以去访问的博客 http://hi.baidu.com/hjzheng

    YUI2.8.1包括demo api是学习的好东西

    6. **数据管理**:YUI Data模块提供了数据存储和操作的功能,例如数据模型、数据视图和数据绑定,为复杂的数据驱动应用提供了基础。 7. **布局管理**:YUI的Layout Manager模块可以帮助开发者创建响应式和自适应的...

    YUI-ajax框架开发文档

    在"YUI-ajax框架开发文档"中,我们可以深入探讨YUI如何通过其Ajax组件实现异步数据通信。 YUI中的Ajax框架主要由`YAHOO.util.Connect`和`YAHOO.widget.DataSource`两个关键部分组成。`YAHOO.util.Connect`是YUI的...

    yui 资源包

    5. **数据绑定**:YUI的数据绑定功能,让数据和视图之间的同步变得容易,减少了DOM操作,提高性能。 二、YUI的组件体系 1. **DOM操作**:YUI的Node和Selector模块提供了高效的DOM操作接口,包括选择、操作、遍历DOM...

    针对YUI框架API

    YUI的DataSource和Model组件支持异步数据获取和数据模型的建立,可以方便地与服务器进行数据交互,并通过ModelList进行数据集合的管理。 6. **动画效果** Animation模块提供了丰富的动画效果,可以实现平滑的元素...

    Struts2+JSON+YUI组合应用之二构建RichClient

    当用户触发一个操作(如点击按钮),Struts2 Action处理请求并返回JSON数据,YUI通过监听Ajax请求完成事件,接收到数据后更新DOM元素,实现无刷新的用户体验。 5. **异步操作**:YUI的Event和Ajax模块使得Struts2...

    Yahoo YUI 插件库

    在这样的论坛系统中,YUI的插件可能被用来实现如消息通知、用户界面交互、数据加载优化等功能。 总之,Yahoo YUI插件库是Web开发者的强大工具箱,提供了丰富的功能来提升Web应用的质量和用户体验。通过结合YUI核心...

    dwr-yui实现分页

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,实现Ajax应用。YUI(Yahoo! User Interface Library)是Yahoo开发的一套前端JavaScript和CSS库,用于构建...

    YUI.rar_html_javascript YUI_yui_yui javascript

    5. **数据表格**:YUI的DataTable组件可用于展示和操作大量数据,支持排序、过滤和分页等功能。 通过学习和实践这些示例,开发者可以深入了解YUI的功能和用法,提高自己的前端开发技能。 总结来说,YUI是一个强大...

    yui的扩展ext.rar

    《深入理解YUI扩展EXT——构建高效前端UI与Ajax应用》 YUI(Yahoo! User Interface Library)是由雅虎公司开发的一套开源JavaScript库,它为开发者提供了丰富的UI组件和功能,以帮助创建高性能、易用的Web应用程序...

    yui_2.5.2 类库

    - **Ajax(Asynchronous JavaScript and XML)**:支持异步数据交换,与服务器进行无刷新通信。 - **IO(Input/Output)**:提供HTTP请求功能,支持GET和POST等HTTP方法,用于与服务器进行数据交互。 - **数据...

    YUI-EXT使用详解

    而YUI-EXT则是对YUI功能的补充,它主要专注于用户界面组件的实现,提供了丰富的UI元素和工具,使得开发者可以快速构建出专业级别的Web应用界面。 在YUI-EXT中,有几个核心概念值得深入理解: 1. **组件...

    yui3-master.zip

    在“io”模块中,YUI3提供了对异步数据请求的支持,如GET、POST等HTTP方法,这在构建Web应用时非常关键。开发者可以通过“yui3-master.zip”来学习如何进行高效的网络通信。 7. **响应式设计** YUI3也考虑到了...

    YUI+Ant 实现JS CSS压缩

    标题:“YUI+Ant 实现JS CSS压缩” 在Web开发中,为了提高页面加载速度和优化用户体验,开发者通常会使用代码压缩工具来减少JavaScript(JS)和CSS文件的大小。YUI Compressor是 Yahoo! 推出的一款开源的压缩工具,...

    yui_3.8.1.zip

    8. **国际化与本地化**:YUI的Lang模块支持多语言环境,方便实现应用的国际化和本地化。 三、YUI 3.8.1的组件库 在YUI 3.8.1中,除了上述核心特性外,还包括众多实用的组件: 1. **DataTable**:用于创建交互式...

    YUI3.6文档及示例

    10. **国际化与本地化**:提供多语言支持,便于实现应用的全球化。 在压缩包中的示例,你可以看到如何实际应用这些功能。通过这些示例,你可以学习如何创建事件监听器、如何使用布局组件构建页面结构、如何实现动画...

    YUI3 中tree的两种实现

    这篇博文“YUI3 中tree的两种实现”探讨了如何在YUI3中创建和管理树形结构。 1. **YUI3 TreeView组件** YUI3 TreeView组件是YUI3核心库的一部分,它允许开发者创建交互式的树结构。这个组件支持节点的添加、删除、...

Global site tag (gtag.js) - Google Analytics