`
fyydkdk
  • 浏览: 4096 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

基于displaytag的可编辑的表格

阅读更多

这是我去年自己做的一个项目里的代码的一部分,把它提出来整理整理。 效果如下:

 

 

主要代码:

editTable.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <jsp:directive.page import="com.example.Song" />
<%@page import="java.util.ArrayList"%>
<html>
<head>
<style type="text/css" media="all">
    
      @import url("css/screen.css");
    
  </style>
 <jsp:scriptlet> 
 
 Song song0=new Song(1,"Losing Grip",1);
 Song song1=new Song(2,"Complicated",2);
 Song song2=new Song(3,"Sk8er Boi",3);
 Song song3=new Song(4,"Im With You",4);
 Song song4=new Song(5,"Mobile",5);
 ArrayList songValuesList = new ArrayList();
 songValuesList.add(song0);
 songValuesList.add(song1);
 songValuesList.add(song2);
 songValuesList.add(song3);
 songValuesList.add(song4);
 request.setAttribute("songValuesList", songValuesList ); 
 
 </jsp:scriptlet>
 
 <script type="text/javascript">
 function performChange(inputObj){							
				var count = 0;
				if(inputObj.parentNode.parentNode.childNodes[count].nodeName=="#text")
				count++;
				inputObj.parentNode.parentNode.childNodes[count].innerHTML=inputObj.value;			
		}
 function onCheckRows(checkBoxObj){		
		var rowObj = checkBoxObj.parentNode.parentNode;	
		if(checkBoxObj.checked==true){		
			rowCheck(rowObj,"edit");
		}else{						
			rowCheck(rowObj,"view");
		}		 
	}
function rowCheck(rowObj,value){		
		var j = 0;
		var count = 1;
		for(var i = 1 ; i<=2; i++){
		if(rowObj.cells[i].childNodes[j].nodeName=="#text")
		{ 
				j++;
				count++; 
		}if(value=="edit"){
		
		rowObj.cells[i].childNodes[j].style.display = "none";
		rowObj.cells[i].childNodes[j+count].style.display = "";
		}	
		else{
		rowObj.cells[i].childNodes[j].style.display = "";
		rowObj.cells[i].childNodes[j+count].style.display = "none";
		}
		}
		
	}
var preNum=new Array();
var i=0;	
function deleteSong(num){ 
	 var count=0;
	 if(i==0){	
	 document.getElementById('resList').deleteRow(num); 
	  preNum[i++]=num;
	  count++;
	 }else{
	  for(var j=0;j<i;j++){  
	   if(preNum[j]<num){
	   count++;
	   }
	  } 
	 document.getElementById('resList').deleteRow(num-count); 
	 preNum[i++]=num;
	 }       
}	

function invertSelected(){ 	
	var handleEl = document.getElementById("Handler"); 
	var els = document.getElementsByName("checkEdit"); 
	for(i=0;i<els.length;i++){ 
	els[i].checked=handleEl.checked; 
		onCheckRows(els[i]);		 							
	}
}
var newRecordCnt = 0;
function addRow(){
		
		var tabel=document.getElementById('resList');
		var rowCount=tabel.rows.length;
		if(tabel==null){
		alert("tabel==null");
		}
		var tableRowTmp = tabel.insertRow(-1);
		
		addRowStyle(tableRowTmp);	
		var newRowTmp = tableRowTmp.insertCell(-1);//	
		var objString = '<input name="checkEdit" onclick="onCheckRows(this);" type="checkbox" checked="true">';
		var obj = document.createElement(objString);
		newRowTmp.appendChild(obj);
		tableRowTmp.appendChild(newRowTmp);		
		var size5 = new Array(1,20,15);		
		for(i = 0; i < size5.length; i++){ 
			newRowTmp = tableRowTmp.insertCell(-1);			
			//first div for display
			objString = '<div style="display:none;"></div>';
			obj = document.createElement(objString);
			if(i==0||i==2){ 
			obj.innerHTML='';		
			}
			newRowTmp.appendChild(obj);						
			objString = '<div></div>';			
			obj = document.createElement(objString);
			if(i==0){
				
				objString = "<input onchange='performChange(this)' type='text'" 
					+ "name='newSongValuesList[" + newRecordCnt + "].sequenceNumber"	
					+ "' value='' size='" + size5[i]+"' maxlength='40' />";
				inputObj = document.createElement(objString);
				obj.appendChild(inputObj);
			}else if(i==1){			
				
				objString = "<input onchange='performChange(this)'  type='text'" 
					+ "name='newSongValuesList[" + newRecordCnt + "].name"					
					+ "' value='' size='" + size5[i]+"' maxlength='40' />";
				inputObj = document.createElement(objString);
				obj.appendChild(inputObj);
			}
			else if(i==2){ 
 				
				var objString = "<a href='javascript:deleteSong(" + rowCount + ");'"
				+	"></a>";
       		 	inputObj = document.createElement(objString);
       		 	inputObj.innerHTML="delete";
				obj.appendChild(inputObj);		
				
			} 
			newRowTmp.appendChild(obj);
			tableRowTmp.appendChild(newRowTmp);
		}
		newRecordCnt++;
	}
	
function addRowStyle(rowObj){
	
	if(rowObj.rowIndex % 2 == 1){
		rowObj.setAttribute("className", "");
	}else{
		rowObj.setAttribute("className", "even");
	}
}

</script>
</head>
<body>
<display:table pagesize=""  requestURI=""
  	class="its" name="songValuesList" sort="page"  id="resList" >
  <display:column title="" style="width:2%;" >	   	 	
             <input onclick="onCheckRows(this);" type="checkbox"  name="checkEdit" 
		 			value="${songValuesList[resList_rowNum - 1].sequenceNumber}"/>
	 		 <input  type="hidden"  name="songValuesList[${resList_rowNum - 1}].id" 
		   value="${songValuesList[resList_rowNum - 1].id}"/>												
   </display:column>
            
   <display:column  style="width:8%;"  title="Sequence"   headerClass="sortable">	
        <div>${songValuesList[resList_rowNum - 1].sequenceNumber}</div>
        <div style="display:none;">		
        		<input onchange="performChange(this)" type="text" name="songValuesList[${resList_rowNum - 1}].sequenceNumber" 
        		  	 size="1"  value="${songValuesList[resList_rowNum - 1].sequenceNumber}">					           											           	
        </div>
    </display:column>	
        				           	
    <display:column  title="Song Name"   style="width:20%;" headerClass="sortable">
        		<div>${songValuesList[resList_rowNum - 1].name}</div>
				<div style="display:none;">											
					<input onchange="performChange(this)" type="text" name='songValuesList[${resList_rowNum - 1}].name'  
					 value="${songValuesList[resList_rowNum - 1].name}"  maxlength="50"/>
   				</div>
     </display:column>    
                
     <display:column title="delete"  style="width:20%">
 		 <div><a href="javascript:deleteSong(${songValuesList[resList_rowNum - 1].sequenceNumber});">delete</a></div>
  	 </display:column>
							           					
     </display:table> 
       <input type="checkbox" id="Handler"  onclick="javascript:invertSelected()"/>Select All				     
       <br/> 
       <input type="button" value="add new song" onclick="javascript:addRow()"/>
</body>
</html>

 

 其他的代码见附件!代码不免会有一些瑕疵,希望与大家一起探讨!

  • 大小: 169.8 KB
分享到:
评论
2 楼 qinghuaking 2009-07-25  
很好的代码 。可惜 displaytag不更新了。估计是受到extjs的冲击。
1 楼 Deathly_CQ 2009-04-01  
下载下来试用了下蛮不错的,解了我的燃眉之急,多谢楼主分享!

相关推荐

    基于DisplayTag的分页及属性定制

    ### 基于DisplayTag的分页及属性定制 #### DisplayTag概述 DisplayTag是一个用于JSP页面的强大标签库,其主要功能在于处理表格数据,包括分页、数据导出、列排序等高级特性。DisplayTag是开源软件,可以从官方网站...

    displayTag1.2

    通过使用DisplayTag 1.2,开发人员可以更专注于业务逻辑,而不用花费大量时间在表格展示的细节上,从而提高了开发效率和代码的可维护性。同时,由于其强大的功能和良好的社区支持,DisplayTag已经成为许多Java Web...

    displaytag简单项目

    这个“displaytag简单项目”是一个基于DisplayTag库的示例应用,旨在帮助开发者理解并掌握如何在实际项目中使用DisplayTag。在这个项目中,你可以看到如何配置DisplayTag、如何创建动态表格以及如何自定义各种展示...

    displaytag及使用方法

    DisplayTag的工作原理基于JSP标签库,它可以与任何Java持久层框架(如Hibernate、JPA)或数据访问技术(如JDBC)配合使用。其核心思想是将表格的渲染逻辑从业务逻辑和视图层分离,使开发者可以更专注于数据处理和...

    displaytag-1.2.jar

    DisplayTag是一个开源的自定义标签库(Custom Tag lib),他...或许上面说的有些夸张了,但是DisplayTag在表格的格式化方面表现确实出色,当然,他也只能显示表格,视图层的大部分工作不就是使用表格来格式化数据嘛?!

    displaytag-jar.rar_Displaytag.jar_displaytag_displaytag 1.2 jar_

    7. **可扩展性**:Displaytag的设计允许开发者通过自定义标签和扩展来适应各种需求。 在使用"Displaytag.jar"时,开发者通常会将其复制到项目的`WEB-INF/lib`目录下,这样Web应用服务器在运行时就能找到并加载这个...

    JavaScript与displayTag标签的合作 -- 操作表头.

    displayTag允许你在`&lt;display:column&gt;`中设置属性,如`property`(对应数据模型中的字段)、`headerClass`(定义表头样式)和`sortable`(是否可排序)等。 接下来,我们关注JavaScript的作用。通过在HTML中引入...

    displaytag详细用法(中文问题已解决)

    总的来说,DisplayTag是一个强大的表格标签库,它简化了Web应用中表格的开发,同时提供了丰富的功能和高度的可定制性。通过解决中文问题并配合合适的编辑器插件,开发者可以更高效地利用DisplayTag构建出满足需求的...

    用JavaScript操作displayTag表头操作

    8. **JavaScript与Java的交互**:由于DisplayTag是基于Java的,可能需要理解如何通过JavaScript调用后台Java方法来实现更复杂的业务逻辑。 9. **错误处理**:在实现这些功能时,理解如何处理可能出现的错误和异常,...

    displaytag-1.1 源码

    Displaytag是一个开源的Java库,专门用于创建复杂的表格和数据展示。在1.1版本中,它主要解决了在处理大数据分页时的问题,这使得它成为处理大量数据的理想选择,尤其是在Web应用程序中。这个源码包包含了一系列的...

    displaytag-1.2-src.zip

    3. **可扩展性**:DisplayTag 具有良好的可扩展性,允许开发者通过自定义标签、属性处理器和装饰器来扩展其功能。例如,可以创建新的列类型或调整默认的样式表。 4. **国际化与本地化**:DisplayTag 支持多语言环境...

    displaytag标签的使用

    DisplayTag 是一个强大的开源 JSP 标签库,专门用于处理网页中的表格展示。它提供了丰富的功能,如分页、数据导出、列排序和分组等,极大地简化了网页表格的开发工作。要使用 DisplayTag,首先需要从其官方网站...

    displaytag-1.1.1标签库及其使用方法.rar

    DisplayTag 1.1.1是该库的一个版本,它包含了一系列预定义的JSP标签,使得创建复杂的、可分页、可排序、可导出的表格变得简单易行。在本篇中,我们将深入探讨DisplayTag 1.1.1的核心功能和使用方法。 首先,...

    displaytag-1.1.rar_displaytag

    它极大地简化了在Web应用中处理表格的任务,提供了丰富的功能和高度可定制性。DisplayTag 1.1是该库的一个版本,其源码对于理解内部工作原理和自定义功能非常有价值。 在DisplayTag中,"src"标签通常指的是表格数据...

    DisplayTag分页及属性

    DisplayTag 是一个基于 JSP 标签库,它通过提供一系列的自定义标签来简化在 JSP 页面中创建复杂的表格和分页操作。这些标签可以用来展示数据库查询结果,实现动态排序,以及处理分页请求。DisplayTag 支持多种展示...

    displaytag 一个后台管理的分页组件

    6. **样式可配置**:通过CSS样式表,开发者可以完全控制表格的外观,包括边框、颜色、字体等。 7. **列隐藏和显示**:用户可以根据需要动态隐藏或显示表格中的列。 8. **扩展性**:DisplayTag 具有良好的扩展性,...

    displaytag

    DisplayTag 是一个开源的Java库,专为Web应用程序设计,用于创建复杂的表格和列格式化。这个库极大地简化了在网页上展示数据表的过程,提供了许多高级功能,如分页、排序、国际化、导出等。它基于JSP 2.0标签库,...

    DisplayTag应用

    DisplayTag 是一个强大的开源标签库,专为 Java Web 开发设计,主要用于在 MVC 模式下展示表格数据。它的特点是功能丰富,易于使用,并且高度可定制化,能够帮助开发者快速构建美观的数据展示页面。DisplayTag 支持...

    displaytag-1.0-b3.zip

    DisplayTag 是一个开源的Java库,专为Web应用程序设计,用于创建复杂的表格展示。这个"displaytag-1.0-b3.zip"文件包含了DisplayTag库的版本1.0的第三个beta版本。DisplayTag通过简化HTML表格的实现,提供了一种强大...

    displaytag的使用指南(全)

    DisplayTag 是一个非常实用的工具,它简化了数据表格的创建过程,并提供了丰富的自定义选项,使得开发者能够根据实际需求灵活地定制表格样式和功能。通过本文的介绍,相信读者已经掌握了 DisplayTag 的基本使用方法...

Global site tag (gtag.js) - Google Analytics