`

Display标签功能扩展--添加列宽调整功能

阅读更多
  Display是很有名的表现层标签,方便快捷,效率不错,相信很多人都用过。最近拿来正式研究了一下,发现它缺少一个目前很流行的特点:表格列宽可调整。扩充这个功能比较容易想到的办法是,修改标签的源码,增加相应的控制代码。这样做有个不好的地方,就是,当标签升级的时候有些不容易处理。

  另一种方式,就是使用javascript结果DOM控制技术,在页面上直接添加相应的代码。

  代码比较简单,还简单加了几句注释,不进行过多讲解了。需要说明的是,只写了几句简单的代码,没有考虑多浏览器支持支持的问题;当表头有排序链接的时候,会把表头撑成两行,这是由于display.css文件中,对于sortable类的定义为宽度100%的block模式,可将宽度修改成99%来解决(解决得不是很优雅)。

  将代码存成jsp文件,放到display例子上下文中就可以了。

  代码如下:
 < %@ page  language = "java"   pageEncoding = "GB18030"
      import = "java.util.*,org.displaytag.sample.*" % >
 < %@ taglib  uri = "http://displaytag.sf.net/el"   prefix = "display" % >
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 < html   xmlns = "http://www.w3.org/1999/xhtml" >
 < head >
 < title > 表格标签测试样例(作者:wallimn,电邮:wallimn@sohu.com) </ title >
 < style   type = "text/css"   media = "all" >
 @import url("css/maven-base.css");
 @import url("css/maven-theme.css");
 @import url("css/site.css");
 @import url("css/screen.css");
 </ style >
 < style   type = "text/css" >
 .ghr {
     display: block;
     cursor: col-resize;
     width: 2px;
     padding: 0px;
     margin: 2px 0px 0px 0px;
     height: 10px;
     font-size: 1px;
     float: right;
     position: relative;
     right: 0px;
     z-index: 2;
 }
 .debug {
     border: 1px solid red;
 }
 </ style >
 </ head >
 < body >
 < %
     request.setAttribute("test", new ReportList(20));
 % >
 < h2 > 以外挂JS代码的方式,实现Display标签形成的表格列宽可控 </ h2 >
 < display:table   name = "test"   class = "Mars"   style = "width:600"   id = "mytab" >
      < display:column   property = "amount"   title = "账号"   style = "width:200"   />
      < display:column   property = "project" />
      < display:column   property = "task"   />
      < display:column   property = "count"   />
      < display:column   property = "city"   title = "城市"   />
 </ display:table >
 < script   type = "text/javascript" >
     //这个函数没有使用,开始测试时使用的。
     function OldMethod(){
         var  tables  =  document .getElementsByTagName("table");
         var ctrlObj;
         if (tables) {
             for ( var  i  =  0 ; i  <   tables.length ; i++) {
                 if (tables[i].className) {
                     var  ths  =  tables [i].getElementsByTagName("th");
                     for ( var  j  =  0 ; j  <   ths.length ; j++) {
                         ths[j].insertBefore(CreateHeadCtrl(),ths[j].firstChild);
                     }
                 }
             }
         }
     }
     //创建用于拖动控制的元素
     function CreateHeadCtrl() {
         var  f  =  document .createElement("font");
         // f.className  =  "ghr debug" ;
          f.className  =  "ghr" ;
          f.onmousedown  =  MouseDownToResize ;
          f.onmouseup  =  MouseUpToResize ;
          f.onmousemove  =  MouseMoveToResize ;
         return f;
     }
     //添加控制元素的代码
     function applyCtrl(tableId){
         var  table  =  document .getElementById(tableId);
         if (table) {
             var  ths  =  table .getElementsByTagName("th");
             for ( var  j  =  0 ; j  <   ths.length ; j++) {
                 ths[j].insertBefore(CreateHeadCtrl(),ths[j].firstChild);
             }
         }
     }
     //此处为表格添加控制元素。
     applyCtrl("mytab");
     function MouseDownToResize() {
         //alert(obj.outerHTML);
          obj  =  this ;
          obj.mouseDownX  =  event .clientX;//鼠标点击的坐标
          obj.pareneTdW  = (obj.parentElement.offsetWidth) ? obj.parentElement.offsetWidth : 100;//原TD的宽   
         obj.setCapture();
         return false;
     }
     
     function MouseMoveToResize() {
          obj  =  this ;
         if (!obj.mouseDownX)
             return false;
         var  newWidth  =  obj .pareneTdW * 1 + event.clientX * 1 - obj.mouseDownX;
         if (newWidth  >  0) {
              obj.parentElement.style.width  =  newWidth ;
         }
     }
     function MouseUpToResize() {
          obj  =  this ;
         obj.releaseCapture();
          obj.mouseDownX  =  0 ;
     }
 </ script >



/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn 电邮:wallimn@sohu.com 时间:2009-01-09
博客:http://blog.csdn.net/wallimn http://wallimn.iteye.com
网络硬盘:http://wallimn.ys168.com
/***********文章发表请与本人联系,作者保留所有权利*************/
 



1
0
分享到:
评论

相关推荐

    SSHConformity【display标签和taglib标签】,display标签,pager-taglib标签

    在JSP中,taglib允许开发者定义自己的标签来扩展JSP的功能。SSHConformity可能包含了一些自定义的taglib,这些标签通常是为了满足项目特定需求而创建的。比如,项目可能会有一个`pager-taglib`,这个标签库专门用于...

    SSHConformity【display标签和taglib标签缺架包】,ssh整合,分页,display标签,pager-taglib标签

    在本主题中,我们将重点讨论SSH整合、分页功能以及Display Tag和Pager Taglib这两个常用的标签库。 首先,SSH(Spring、Struts和Hibernate)是Java Web开发中的三大核心技术。Spring提供了依赖注入和面向切面编程,...

    DisplayPort-Alt-Mode-on-USB-C.pdf

    This standard describes the use of the DisplayPort protocol between devices that support the USB Type-C connector using USB Type-C to USB Type-C Cable Assemblies. It describes cable assemblies that ...

    Dell-On-Screen-Display-Application,戴尔屏幕显示驱动

    Dell-On-Screen-Display-Application,戴尔屏幕显示驱动

    在设置-display-添加控制屏幕旋转方向按钮0001-Settings-Add-ScreenRotate-Func.patch

    在设置-display-添加控制屏幕旋转方向按钮0001-Settings-Add-ScreenRotate-Func.patch

    JS表格排序,筛选列,调整列宽

    本文将深入探讨如何实现表格的排序、筛选列以及调整列宽的功能,这些都是提高用户交互性和数据可读性的重要手段。 首先,让我们了解表格的基础。在HTML中,`&lt;table&gt;`元素用于创建表格,`&lt;tr&gt;`表示行,`&lt;td&gt;`或`&lt;th&gt;...

    Android8.1-Settings-display里添加控制屏幕旋转方向的菜单.zip

    基于Android8.1,在设置-显示下添加一个控制屏幕显示方向的菜单, 包括0°、90°、180°、270°四个方向, 主要是用ListPreference实现菜单显示。 有实现的Java源码。 代码一验证有效。

    linux 的GNOME Display Manager gnm-2.20.0源代码

    linux 的GNOME Display Manager gnm-2.20.0源代码linux 的GNOME Display Manager gnm-2.20.0源代码linux 的GNOME Display Manager gnm-2.20.0源代码linux 的GNOME Display Manager gnm-2.20.0源代码linux 的GNOME ...

    USB-DevDays-DisplayPort-Alternate-Mode-2016-final4.pdf

    从给定的文件信息中,我们可以提取出一系列关于USB Type-C以及DisplayPort相关技术知识点,特别是关于DisplayPort的Alt模式(Alternate Mode)的技术细节和标准。以下是这些知识点的详细阐述: 1. USB Developer ...

    displaytag-1.1.jar和display-export-poi-1.1.jar下载

    在使用displaytag-1.1.jar和display-export-poi-1.1.jar时,首先需要将它们添加到项目的类路径中,通常是通过Maven或Gradle等构建工具管理依赖。然后在JSP页面中,可以使用DisplayTag提供的标签来创建和配置表格。...

    DisplayPort-Alt-Mode-on-USB-C-d3.pdf

    综上所述,DisplayPort Alt Mode on USB Type-C是一项旨在提升USB Type-C接口多功能性的技术标准,它使DisplayPort设备能够无缝地与支持USB Type-C的设备连接,提供高效、高分辨率的视频传输,同时兼容USB数据传输和...

    DisplayPort-Alt-Mode-v2.0

    DisplayPort Alt Mode v2.0 标准简介 DisplayPort Alt Mode v2.0 是视频电子标准协会(VESA)发布的一项标准,该标准定义了在 USB Type-C 连接器和电缆上使用 DisplayPort 协议的规则和规范。该标准的主要目的是...

    路由协议命令display ip routing-table ip-prefix

    ### 路由协议命令详解:display ip routing-table ip-prefix #### 概述 在复杂的网络环境中,了解网络路由信息对于故障排查、性能优化及安全维护至关重要。在H3C路由器(例如MSR50系列)中,`display ip routing-...

    mod_Display-News-BK-v1.6.06-J1.5-Chinese

    描述中提到的“功能很强大的新闻显示模块,中文版的哦,mod_Display-News-BK”,进一步强调了该模块的强大功能,并指出它具有中文界面,适应中国用户的使用习惯。"mod_Display-News-BK" 是模块的标识符,可能也是在 ...

    D2T1-4 - VESA DP Alt Mode over USB Type-C.pdf

    VESA(Video Electronics Standards Association,视频电子标准协会)开发的DisplayPort(DP)标准是目前广泛应用于显示器接口的技术之一。随着USB Type-C接口的普及,VESA推出了DP over USB-C(DisplayPort ...

    display-forum-project-master.zip

    【标题】"display-forum-project-master.zip" 是一个压缩包文件,其中包含了 "display-forum-project-master" 这个项目的源代码。这个项目可能是一个在线论坛的实现,用于展示、讨论和分享各种主题。让我们深入了解...

    display-tag-1.1.1

    7. **扩展性**:Display Tag的设计允许开发者通过自定义标签和扩展类来实现特定的显示逻辑和功能,增强了框架的灵活性和可定制性。 在实际应用中,Display Tag 1.1.1版本可能包含了以下文件: 1. `displaytag.jar`...

    Android wifi display功能优化

    Android WiFi Display功能优化 Android WiFi Display功能优化是指在Android系统中,WiFi Display功能的优化建议,以提高该功能的性能和可维护性。本文将从架构图、代码分析和优化建议三个方面对Android WiFi ...

    js页面中添加 ---左右添加多选框

    在JavaScript页面开发中,"左右添加多选框"通常指的是创建一种交互式用户界面,其中包含可以被用户选中或取消选中的复选框,并且这些复选框以某种方式排列,例如从左到右或者分列显示。这种布局常见于需要用户进行多...

    Web 的display标签分页使用说明

    本教程将详细讲解如何在项目中使用Display Tag实现分页功能。 首先,你需要在项目中引入Display Tag库。通常,这可以通过在`pom.xml`(如果你的项目基于Maven)或`build.gradle`(如果是Gradle项目)文件中添加依赖...

Global site tag (gtag.js) - Google Analytics