`
raisun_1988
  • 浏览: 113779 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Struts2.0自定义标签

    博客分类:
  • Java
阅读更多

最近项目中有这样的需求,需要将普通的时间格式转行成时间间隔模式,如:将2009-07-01 10:16:14这种格式变成:昨天21:45:26 格式,我思前想后,为了显示的需要还是自定义个标签较合理。现将方法跟大家分享,算法不重要,重要的是自定义标签的流程。
我们分二步走
1.编写自定义标签类。
2. 创建taglib文件(.tld),编写标签声明。

第一步:
首先编写时间格式转换的方法:

Java代码 复制代码
  1. public static String getDisplayTime(Date date){   
  2.          Date nowDate=new Date();   
  3.          Calendar oldCalendar=Calendar.getInstance();   
  4.          Calendar nowCalendar=Calendar.getInstance();   
  5.          oldCalendar.setTime(date);   
  6.          nowCalendar.setTime(nowDate);   
  7.         int day=getDaysBetween(oldCalendar,nowCalendar);   
  8.          Long nowTime=nowDate.getTime();   
  9.          Long oldTime=date.getTime();   
  10.          Long time=nowTime-oldTime;   
  11.         if(time>60*60*1000){   
  12.             if(day==0){   
  13.                 return new SimpleDateFormat("HH:mm:ss").format(date);   
  14.              }else if(day==1){   
  15.                 return "昨天"+new SimpleDateFormat("HH:mm:ss").format(date);   
  16.              }else if(day==2){   
  17.                 return "前天"+new SimpleDateFormat("HH:mm:ss").format(date);   
  18.              }else{   
  19.                 return new SimpleDateFormat("yyyy-MM-dd").format(date);   
  20.              }   
  21.          }else if(time<60*1000){   
  22.             return "刚刚";   
  23.          }else{   
  24.             return (long)time/(60*1000)+"分钟前";   
  25.          }   
  26.      }  
public static String getDisplayTime(Date date){
  Date nowDate=new Date();
  Calendar oldCalendar=Calendar.getInstance();
  Calendar nowCalendar=Calendar.getInstance();
  oldCalendar.setTime(date);
  nowCalendar.setTime(nowDate);
  int day=getDaysBetween(oldCalendar,nowCalendar);
  Long nowTime=nowDate.getTime();
  Long oldTime=date.getTime();
  Long time=nowTime-oldTime;
  if(time>60*60*1000){
   if(day==0){
    return new SimpleDateFormat("HH:mm:ss").format(date);
   }else if(day==1){
    return "昨天"+new SimpleDateFormat("HH:mm:ss").format(date);
   }else if(day==2){
    return "前天"+new SimpleDateFormat("HH:mm:ss").format(date);
   }else{
    return new SimpleDateFormat("yyyy-MM-dd").format(date);
   }
  }else if(time<60*1000){
   return "刚刚";
  }else{
   return (long)time/(60*1000)+"分钟前";
  }
 }

这段代码很简单,相信大家一看便懂了。
下面是距离当前时间天数的方法:

Java代码 复制代码
  1. public class Times extends Component{   
  2.     private String name;   
  3.        
  4.     public String getName() {   
  5.         return name;   
  6.      }   
  7.   
  8.     public void setName(String name) {   
  9.         this.name = name;   
  10.      }   
  11.     public Times(ValueStack arg0) {      
  12.         super(arg0);      
  13.      }      
  14.     @Override     
  15.         public boolean start(Writer writer) {   
  16.             boolean result = super.start(writer);   
  17.             try {   
  18.                  java.util.Date date = (java.util.Date) findValue(name);   
  19.                  String str=DataTime.getDisplayTime(date);   
  20.                  writer.write(str);   
  21.              } catch (IOException ex) {   
  22.                  Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex);   
  23.              }   
  24.             return result;   
  25.          }      
  26. }  
public class Times extends Component{
 private String name;
 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
 public Times(ValueStack arg0) {   
        super(arg0);   
    }   
 @Override  
     public boolean start(Writer writer) {
         boolean result = super.start(writer);
         try {
          java.util.Date date = (java.util.Date) findValue(name);
          String str=DataTime.getDisplayTime(date);
             writer.write(str);
         } catch (IOException ex) {
             Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex);
         }
         return result;
     }   
}


这里是写一个方法调用这个算法返回一个值

Java代码 复制代码
  1. public class TimeTag extends ComponentTagSupport{   
  2.     private String name;   
  3.   
  4.     public void setName(String name) {   
  5.         this.name = name;   
  6.      }   
  7.   
  8.     @Override     
  9.     public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) {      
  10.         return new Times(arg0);      
  11.      }      
  12.      
  13.     //获得参数      
  14.     protected void populateParams() {      
  15.         super.populateParams();      
  16.          Times pages = (Times)component;      
  17.          pages.setName(name);   
  18.             
  19.      }      
  20. }  
public class TimeTag extends ComponentTagSupport{
 private String name;

 public void setName(String name) {
  this.name = name;
 }

 @Override  
    public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) {   
        return new Times(arg0);   
    }   
  
    //获得参数   
    protected void populateParams() {   
        super.populateParams();   
        Times pages = (Times)component;   
        pages.setName(name);
         
    }   
}


这里继承ComponentTagSupport类是为了获得标签中的属性值,并包装成Component对象。继承Component类是为了从Struts2中的ValueStack中获得相对应的值。
第二步:建立smallfish.tld

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>     
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">     
  3. <taglib>   
  4.      <tlib-version>2.2.3</tlib-version>   
  5.      <jsp-version>1.2</jsp-version>   
  6.      <short-name>smallfish</short-name>   
  7.      <uri>/jzy</uri>   
  8.      <display-name>"smallfish Tags"</display-name>        
  9.             <tag>   
  10.              <name>times</name>   
  11.              <tag-class>com.common.tag.TimeTag</tag-class>   
  12.              <body-content>empty</body-content>   
  13.              <attribute>   
  14.                  <name>name</name>   
  15.                  <required>true</required>   
  16.                  <rtexprvalue>true</rtexprvalue>   
  17.              </attribute>   
  18.          </tag>   
  19. </taglib>  
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
<taglib>
    <tlib-version>2.2.3</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>smallfish</short-name>
    <uri>/jzy</uri>
    <display-name>"smallfish Tags"</display-name>     
           <tag>
            <name>times</name>
            <tag-class>com.common.tag.TimeTag</tag-class>
            <body-content>empty</body-content>
            <attribute>
                <name>name</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
</taglib>


经过这些操作后,一个自己的标签就弄好了,tld文件可以扩充,在用的时候就像Struts2自带的标签一样,导入,页面显示时就用<smallfish:times name="time" />这样就可以了。是不是很简单呢。

学java和asp.net的朋友-免费的浪曦java视频和asp.net视频下载.
是全套的完整的。http://www.itpob.cn/thread-196-1-1.html
有需要的可以去下。

分享到:
评论

相关推荐

    spring2.5 struts2.0 hibernate3.2.5 搭建的企业级开发基础模块

    哦 忘记介绍了, 当中还有本人写的几个自定义标签:com.light.framework.tag 自定义标签的帮助类:com.light.framework.tagAssistant 还有登录拦截器:com.light.framework.interceptor 字符集过滤器:...

    struts2 标签库 帮助文档

    &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. &lt;s:a href=""&gt;&lt;/s:a&gt;-----超链接,类似于html里的&lt;a&gt;&lt;/a&gt; 3. ...

    J2EE体系chm帮助文档大全共27本

    HTML参考手册 css2.0中文手册 J2EE全实例教程 Javascript参考手册 Jsp帮助文档 JSTL中英文对照版 servlet api 中文版chm格式 JAVA设计模式 Hibernate 2.1 中文参考手册 EL表达式 Tomcat中文...struts2.0中文帮助手册

    JAVA程序开发大全---上半部分

    12.1.2 Struts 2.0与Struts 1.x框架的区别 215 12.2 MyEclipse创建基于Struts 2.0框架的项目 215 12.2.1 下载Struts 2.0开发包 216 12.2.2 创建Struts 2.0项目 216 12.2.3 配置Struts 2.0项目 217 12.2.4 创建Struts...

    Jsp宝典 PDF

    JSP宝典PDF电子版下载,JSP宝典全书比较全面地介绍了有关JSP的相关知识,并通过大量实例,循序渐进地教会读者如何构架和开发JSP动态网站、自定义标签开发和标准标签库JSTL使用、以及Ajax等Web2.0新特性。在教程的...

    JSP宝典(PDF)

    JSP宝典PDF电子版下载,JSP宝典全书比较全面地介绍了有关JSP的相关知识,并通过大量实例,循序渐进地教会读者如何构架和开发JSP动态网站、自定义标签开发和标准标签库JSTL使用、以及Ajax等Web2.0新特性。在教程的...

    Jas网站实例 jeecms

    自定义标签内容样式或使用系统提供的内容样式都非常方便。 ·尽量减少对第三方类库的依赖,减小发布包体积。 ·使用fckeditor代替原有编辑器。 ·文章内容不入库,减少数据库体积,程序运行效率更高。

    jsp宝典源码

    本书比较全面地介绍了有关JSP的相关知识,并通过大量实例循序渐进地阐明如何构架和开发JSP动态网站、自定义标签开发和标准标签库JSTL使用以及Ajax等Web2.0新特性。 本书首先介绍了JSP的概念和特征,使读者对JSP先...

    Spring 2.0 开发参考手册

    15.4. Struts 15.4.1. ContextLoaderPlugin 15.4.2. ActionSupport 类 15.5. Tapestry 15.5.1. 注入 Spring 托管的 beans 15.6. WebWork 15.7. 更多资源 16. Portlet MVC框架 16.1. 介绍 16.1.1. 控制器 - ...

    struts_jstl

    * 函数库的使用 * 自定义函数库 * 定义类和方法(必须定义为public static) * 编写tld文件,并且将tld文件放到WEB-INF下 * 在jsp中使用taglib指令引入自定义标签库 * 直接使用即可 &lt;br&gt; ...

    Struts2入门教程。包括jquery集成等。入门必看

    第 8章 STRUTS2标签..............................................................................................................................................54 第 9章 表达式OGNL......................

    java视频教程Day01 免费

    31. Custom Tags I (自定义标签I) 32. Java Standard Tag Library (标准标签库) 33. Expression Language(表达式语言) 34. Expression Language(表达式语言) 35. 使用Java WEB技术编写网页QQ J2EE 框架...

    struts2深入浅出(备java基础,javaweb,javaee,框架)

    Struts2框架介绍、工作原理与架构分析、6大配置文件分析使用通配符定义action、动态方法调用,ActionContext及ServletActionContext...默认拦截器分析、自定义拦截器、OGNL表达式、值栈分析及操作、标签、 json使用。

    精通JSP-Web开发技术与典型应用 光盘代码

    \ch10\* 第10章 创建自定义标签所有例程代码 \ch11\* 第11章 使用Struts控制器简化MVC开发所有例程代码 \ch12\* 第12章 使用Servlet2.4过滤器和监听器所有例程代码 \ch13\* 第13章 数据库访问:JDBC所有例程代码...

    J2EE应用开发详解

    80 5.6.9 config对象 80 5.7 JSP自定义标签 81 5.8 小结 84 第6章 XML、CSS和XSLT 85 6.1 XML 85 6.1.1 什么是XML 85 6.1.2 XML的产生 85 6.1.3 XML的用途 86 6.1.4 XML元素 87 6.1.5 XML属性 87 6.1.6 XML语法规则 ...

    Java/JavaEE 学习笔记

    Struts2.0..263 第一章 MVC Model.........................263 第二章 Struts Basic264 第三章 Action,Result & Struts2 Tag Library......................267 第四章 Data Transfer & Type Converter..273 第五...

    J2EE学习笔记(J2ee初学者必备手册)

    Struts2.0..263 第一章 MVC Model.........................263 第二章 Struts Basic264 第三章 Action,Result & Struts2 Tag Library......................267 第四章 Data Transfer & Type Converter..273 第五...

    spring chm文档

    15.4. Struts 15.4.1. ContextLoaderPlugin 15.4.2. ActionSupport 类 15.5. Tapestry 15.5.1. 注入 Spring 托管的 beans 15.6. WebWork 15.7. 更多资源 16. Portlet MVC框架 16.1. 介绍 16.1.1. 控制器 - ...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

Global site tag (gtag.js) - Google Analytics