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

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

阅读更多
YUI Library: 一切关于yui的资料都可以获取
http://developer.yahoo.com/yui/
上个效果图:

两步走:
1 数据的获取(jquery form动态提交或者jquery ajax异步请求,内容和记录分两次请求):
2 数据的显示:(yahooui datatable)


1 数据的获取(jquery form动态提交或者jquery ajax异步请求):
YAHOOUI提供datasource可以异步去查询数据和数据的总记录数(一次查完),由于

                   
 //数据源
	this.myDataSource = new YAHOO.util.DataSource(URL);
         


         URL填写成action的时候跳转不了,可能自己还没有弄清楚,有谁知道请告诉我,
         谢谢了.数据获取采用jquery的form动态提交或者js变量作为URL参数进行请求都可以,
         但是后者会有中文乱码问题,并且当参数过长的时候URL会变得很长.曾经把参数以
           json格式传递过去,只需一个变量,后台直接将json格式参数转换成JavaBean
          关于json与java之间的相互转换请看这里,以后补上


         现在补上了,2010-2-10,点击连接就可以看了js变量作为URL参数乱码            内容数据和分页导航的数据是分两次请求去取的,所以查询条件和page,perPageResults都必须同步的传递过去,否则内容和记录数就不一致            

js变量作为URL参数进行传递
//得到分页内容url 
function getQueryUrl(page) {
	var account = document.getElementById("uuser").value;
	var name = document.getElementById("uname").value;
	var perPageResults = document.getElementById("perPageResults").value;
	var backEndUrl = contextPath+"/yuidemo/userManager.do?method=queryByYahoo_1&count=1&account="+account+"&name="+name+"&perPageResults="+perPageResults;
	if (typeof page != 'undefined'){
		backEndUrl +="&page="+page;
	}
	return backEndUrl;
}
//内容显示 jquery ajax异步请求
function content(pageUrl){
		$.ajax( {
		type : "POST",
		url : pageUrl,
		cache : false,
		dataType: "json",
		success : showContent
	});
}
  
jquery form的动态提交把page也必须包含进去
// 内容显示
function content(){
	 var options = { 
		      dataType:  'json', 	 
		      url:       contextPath+"/yuidemo/userManager.do?method=queryByYahoo_2&count=1",
		      success:   showContent
		 }; 
		 $('#myForm').ajaxForm(options);
		 $('#myForm').submit(); 
}

后台处理
List<UserDTO> list = new ArrayList<UserDTO>();
			int page = 1;
			if (user.getPage() != null && !"".equals(user.getPage())) {
				page = Integer.parseInt(user.getPage());
			}
			int perPageResults = 10;
			if (user.getPerPageResults() != null
					&& !"".equals(user.getPerPageResults())) {
				perPageResults = Integer.parseInt(user.getPerPageResults());
			}
			// ROWNUM rowIndex 从1开始不是从0开始
			user.setStartRowNum((long) (page - 1) * perPageResults + 1);
			user.setEndRowNum((long) page * perPageResults);
			list = this.userDao.query(user);
			JSONArray json = new JSONArray();
			json.clear();
			json = JSONArray.fromObject(list);
			response.setHeader("X-JSON", json.toString());
			response.setCharacterEncoding("UTF-8");
			response.setHeader("Cache-Control", "no-cache,must-revalidate");// 清楚缓存
			response.setHeader("Pragma", "no-cache"); // HTTP 1.0
			response.setDateHeader("Expires", 0); // prevents caching at the
			// json.put("data", 1);
			response.getWriter().print(json.toString());
			return null;   
 
千万不要复制粘贴,我只是说思路而已
2 数据的显示:(yahooui datatable)

此处是第一步执行完后的回调函数,这样页面div上就可以显示数据了
这只是最最基本的一点

function showContent(data){	
						alert(data);
			           YAHOO.widget.DataTable.formatCheckBox = function(elLiner, oRecord,oColumn, oData) {
							var value = oRecord.getData("uuid");
							elLiner.innerHTML = "<input type='checkbox'value='"+value+"'>";
						};
						//表头定义
						var myColumnDefs = [ {
							   key : "<input id='www' name='w' value='www' type='checkbox' onclick=\"selectall()\" >全选",
							   formatter:YAHOO.widget.DataTable.formatCheckBox
						}, {
								key : "uuid",
								label:"用户ID",
								sortable : true,
								formatter:YAHOO.widget.DataTable.formatNumber
							}, {
								key : "uuser",
								label:"帐号",
								sortable : true
							}, {
								key : "uname",
								label:"姓名",
								sortable : true
							}, {
								key : "upassword",
								label:"密码",
								sortable : true
							}, {
								key : "urole",
								label:"角色",
								sortable : true
							},{
									key : "原因",
									formatter : "dropdown",
									dropdownOptions : [ "选择", "无此人", "停机", "忙" ],
									sortable : false
								}
						];
						//数据源
						this.myDataSource = new YAHOO.util.DataSource(data);
						//this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
						this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
						this.myDataSource.responseSchema = {
							//resultsList : "userList",
							// Use the parse methods to populate the RecordSet with the right data types   
							fields : [ {
								key : "uuid",parser:"number"
							}, // this is already string data so no parser needed   
									{
										key : "uuser" 
									}, 
									{
										key : "uname"
									},    
									{
										key : "upassword"
									},  
									{
										key : "urole"
									} 
							]
						};
						//数据源与页面div绑定
						this.myDataTable = new YAHOO.widget.DataTable("formatting",
								myColumnDefs, this.myDataSource);
}


例子:
Spring2.5+ibatis+Struts1  oracle 9.0
导入即可运行

需求变更
1--列宽要随便改导入:

<script type="text/javascript" src="../js/dragdrop-min.js"></script>

在列定义中加属性:
resizeable:true,



2--列字段的值是0的要求在页面上显示的时候是 空白

在列定义中定义[/size]

//投诉及建议
var renComplainsFormatte = function (el, oRecord, oColumn, oData) {
			var renComplains =oRecord.getData('renComplains');
			if (renComplains == '0') {
				el.innerHTML='';
			}
		};
//在列定义再加上:
formatter:renComplainsFormatte 



3--在DataTable中下拉列表动态显示
分两步走

a : 初始化信息放在ServletContext中
     主要说下类:
    初始化信息放在list中,(属性 -- > 指向list)
     list<SelectDTO>
    SelectDTO中有属性String value,String text
    为什么放在list中,而不是放在map中?(页面上c标签可以循环装DTO的list)

b:  把信息转化成js的Array,在YUI列定义中进行设置
    1--ServletContext中的list信息转化成Array
   
 <script type="text/javascript">
	        var dropdata = new Array();
			//var dropdata = [{'text':'请选择','value':'-1'}];
			var first = {'label':'请选择','value':'-1'};
			dropdata.push(first);
			//dropdata.push(aa);
			 <c:forEach items="${oyp}" var="item">
			    var object = new Object();
			    object.label = "${item.text}";
			    object.value = "${item.value}";
				//dropdata.push({'text':'${item.text}','value':'${item.value}'});
				dropdata.push(object);
		        </c:forEach>

			</script>



          2--yui中进行设置这个下拉信息Array(在列定义中进行设置)
        
  {
					key : "uname",
					sortable : false,
					editor: new YAHOO.widget.DropdownCellEditor({dropdownOptions:eval(dropdata), disableBtns:true}),
					formatter: function(el, oRecord, oColumn, oData) { 
						    var combo = dropdata; 
						    for (var i = 0;i<combo.length;i++) { 
						       if (oData == combo[i].value) { 
						          el.innerHTML = combo[i].label; 
						          return; 
						       } 
						       el.innerHTML = oData;
						    } 
			          } 

			},
  


附上例子:

Spring2.5+ibatis+Struts1  oracle 9.0
导入即可运行(only a table and a procedure)
分享到:
评论
1 楼 hongye1120 2010-10-25  
菜鸟学习了!

相关推荐

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

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

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

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

    jQuery的异步调用

    jQuery对JSON数据提供了良好的支持,允许开发者在"$.ajax"函数中指定数据类型为"json",并能够自动将接收到的JSON格式字符串解析成JavaScript对象,或者将JavaScript对象序列化为JSON字符串发送到服务器。...

    YUI.rar_html_javascript YUI_yui_yui javascript

    7. **AJAX**:YUI的AJAX组件支持异步数据交换,使得网页可以在不刷新的情况下更新内容。 8. **动画效果**:YUI的Anim模块可以创建复杂的动画效果,增强了用户体验。 **YUI的示例** 压缩包中的示例文件展示了如何...

    yui_2.9.0用于javascript基础教程

    适合图灵程序设计丛书web开发系列-javascript基础教程的学习使用

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

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

    yui 资源包

    2. **Ajax**:IO模块用于实现异步数据请求,支持JSONP、XHR等通信方式。 3. **表格与表单**:DataTable和Form模块提供表格和表单的高级处理,包括排序、过滤、验证等功能。 4. **布局与容器**:Panel、Overlay、...

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

    5. **Ajax通信**:YUI的Connection Manager模块简化了与服务器的异步通信,支持GET、POST等多种HTTP请求方法,可以处理XML、JSON、文本等各种数据格式。 6. **数据管理**:YUI Data模块提供了数据存储和操作的功能...

    Yahoo JavaScript库 YUI源码

    6. **DataSource(数据源)**:处理异步数据请求,支持XML、JSON等多种数据格式。 7. **IO(网络通信)**:处理HTTP请求,实现AJAX功能。 8. **Calendar(日历)**:创建交互式日历组件。 9. **DataTable(表格)...

    yui.zip_YUI aj_ajax_ajax java_javascript_javascript YUI Ajax

    5. **connection**:AJAX连接模块,是实现异步数据交换的核心部分,允许在后台与服务器通信而无需刷新页面。 6. **calendar**:日历组件,为Web应用提供日期选择功能。 7. **dragdrop**:拖放模块,让用户能够通过...

    dwr-yui实现分页

    DWR通过提供异步通信的能力,使得前端可以动态地请求服务器端的数据,而YUI则提供了丰富的UI组件和样式,帮助我们创建美观的用户界面,包括分页控件。 下面我们将详细探讨如何结合DWR和YUI实现分页: 1. **DWR配置...

    yui2.9

    Ajax模块简化了异步数据请求,支持XMLHttpRequest及JSONP;Animation模块则让开发者能够创建复杂的动画效果。 2. **UI组件**:YUI 2.9包含了一系列的UI组件,如Container(容器)、Form(表单)、Button(按钮)、...

    Jquery、YUI、ExtJs 三大javascript框架表单验证带提示功能的demo

    本教程将深入探讨Jquery、YUI和ExtJs这三大JavaScript框架在表单验证和提示功能方面的应用。 **jQuery** jQuery是一款轻量级、高性能的JavaScript库,以其简洁的API和跨浏览器兼容性闻名。在表单验证方面,jQuery...

    Professional JavaScript Frameworks: Prototype,YUI, ExtJS, Dojo and MooTools

    《Professional JavaScript Frameworks: Prototype,YUI, ExtJS, Dojo and MooTools》是关于JavaScript框架的高级编程资源,包含了各种知名框架的源代码,这些框架包括Prototype、YUI(Yahoo! User Interface Library...

    JavaScript libraries--->jQuery, Prototype, Mootools, YUI, Extjs, Dojo

    在给定的标题"JavaScript libraries---&gt;jQuery, Prototype, Mootools, YUI, Extjs, Dojo"中,提到了五种著名的JavaScript库:jQuery、Prototype、Mootools、YUI和ExtJS。这些库都有各自的特性和优势,下面将详细介绍...

    jQuery一本电子书走天下(面试不愁)

    5. **Ajax交互**:深入理解jQuery的`.ajax()`, `.get()`, `.post()`等函数,以及如何处理异步请求的数据和错误。 6. **插件开发**:介绍如何编写和使用jQuery插件,扩展jQuery的功能,提高代码复用性。 7. **...

    YUI js方法使用列子

    5. **DataSource(数据源)**:用于处理异步数据请求,支持Ajax、JSONP等数据获取方式。 6. **IO(输入/输出)**:提供Ajax接口,处理与服务器的通信。 7. **Selector(选择器)**:类似jQuery的选择器,可以快速...

Global site tag (gtag.js) - Google Analytics