`
raisun_1988
  • 浏览: 117832 次
  • 性别: 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
有需要的可以去下。

分享到:
评论

相关推荐

    struts2.0标签使用源码

    了解Struts2.0标签的源码有助于我们更好地优化代码,例如,自定义标签以满足特定需求,或者在处理复杂数据结构时利用OGNL的灵活性。此外,还可以学习如何配置Struts2拦截器,结合标签库实现更强大的功能,如表单验证...

    Struts 2.0 UI标签实例程序

    - 通过主题和模板,可以自定义标签的外观,满足不同设计需求。 - 错误和验证可以通过Struts 2的内置机制处理,如使用`&lt;s:fielderror&gt;`标签显示错误信息。 在实际项目中,UI标签的使用极大地降低了页面开发的复杂性...

    struts2.0 教程(标签,XML配置,入门例子,帮助手册)

    总的来说,这个教程涵盖了Struts2.0的基础知识,从最基础的XML配置到复杂的Action链和自定义标签使用,都是学习和掌握Struts2.0必不可少的内容。通过深入学习和实践,你将能够熟练地运用Struts2.0构建高效、可维护的...

    struts 2.0 自定义类型转换器 注册类型转换器 入门实例 简单实例

    Struts 2.0 是一个基于MVC设计模式的Java Web框架,它极大地简化了开发过程,特别是处理用户输入和数据转换。在Struts 2中,类型转换器(Type Converter)扮演着至关重要的角色,它负责将HTTP请求中的字符串数据转换...

    struts 2.0 常用标签

    Struts 2.0 是一个基于MVC(Model-View-Controller)设计模式的Java Web...在"struts2.0常用标签.txt"文件中,你可能会找到更多关于这些标签的详细使用示例和解释,这将有助于进一步学习和掌握Struts 2.0 标签的用法。

    Struts_2.0从入门到精通

    Struts2.0提供了丰富的标签库,分为非UI标签和UI标签两大类。非UI标签主要用于控制流程和数据处理,例如用于URL重写,用于输出变量值。而UI标签则专注于页面元素的展示,如、等,它们能自动绑定模型属性,极大地简化...

    Struts2.0 入门教程+帮助手册+权威指南+配置文档+标签库+增删改查代码等.rar

    这个压缩包文件提供了丰富的资源,包括入门教程、帮助手册、权威指南、配置文档以及标签库和实际操作的增删改查代码,为学习和掌握Struts2.0提供了全面的支持。 首先,`Struts2.0中文教程.chm`和`Struts2入门2.pdf`...

    Struts2.0学习系列 以及 Struts2.0安装包

    Struts2.0是Java Web开发中的一个强大框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性高、结构清晰的Web应用程序的工具。这个"Struts2.0学习系列"旨在帮助初学者及进阶者深入理解并...

    struts2.0标签详解

    Struts2.0是一个强大的Java Web开发框架,它极大地简化了MVC(Model-View-Controller)应用的构建。在Struts2中,标签库是其核心特性之一,提供了丰富的标签来帮助开发者更加便捷地创建动态网页。本文将深入探讨...

    struts2.0 经典书籍 源码 标签学习合集

    2. **自定义标签**:如何创建和使用自定义标签,以满足特定需求。 3. **标签的属性和用法**:每个标签都有其特定的属性和用法,熟悉这些可以帮助你更有效地构建视图。 通过这些资源,无论是初学者还是有经验的...

    struts2.0英文文档

    4. **强大的标签库**:Struts2.0 提供了丰富的标签库支持,如 `&lt;s:textfield&gt;`、`&lt;s:submit&gt;` 等,这些标签可以帮助开发者快速构建用户界面。 5. **国际化支持**:Struts2.0 内置了国际化(I18N)支持,可以通过配置...

    struts2.0的标签学习资料

    以上只是Struts2.0标签库中的一部分,实际上还有更多标签如表单验证、标签自定义等,它们共同构成了强大的视图层支持,使得Struts2.0在Java Web开发中被广泛应用。掌握这些标签的使用,将极大提高开发效率和代码质量...

    struts2.0标签教程详解资料

    六、自定义标签 如果内置的标签不能满足需求,开发者还可以创建自己的标签。这需要编写对应的Java类,并配置在struts.xml文件中,从而扩展Struts2的功能。 七、最佳实践 1. 在使用标签时,尽量避免直接操作HTML,...

    struts2.0开发的都市供求信息系统

    Struts2.0是一款强大的Java Web开发框架,它在MVC设计模式的基础上提供了一套完整的解决方案,用于构建可维护、可扩展的企业级应用程序。在这个"都市供求信息系统"项目中,我们能够深入理解并实践Struts2.0的核心...

    Struts2.0 入门学习资料

    4. 自定义标签库:Struts2.0提供了一套强大的自定义JSP标签,简化视图层的开发,如、等。 5. 国际化与本地化:Struts2.0内置了对多语言的支持,开发者可以通过资源文件轻松实现应用的国际化。 三、Struts2.0的配置...

    struts2.0中文教程

    其次,Struts2.0提供了强大的拦截器(Interceptor)机制,这是一系列预定义的或自定义的处理步骤,可以在Action执行前后进行干预,如日志记录、权限检查等。开发者可以通过自定义拦截器来实现特定的需求,增强框架的...

    Struts 2.0 in Action

    第三部分“Building the View: Tags and Results”专注于如何利用Struts 2.0提供的标签库和结果处理机制来构建动态视图页面。 - **标签库**:Struts 2.0包含了一套丰富的标签库,这些标签不仅提供了HTML元素的快速...

    Struts2.0培训课件

    Struts2.0是Java Web开发中的一个强大框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性高、结构清晰的Web应用程序的工具。这个"Struts2.0培训课件"包含了深入学习和理解Struts2.0框架...

    学习Struts 2.0系列

    9. **Struts 2.0标签库**:熟悉各种内置的JSP标签,如s:textfield、s:submit等,以及如何使用它们来简化视图层开发。 10. **异常处理**:学习如何配置全局和局部的异常处理策略,以优雅地处理运行时错误。 11. **...

Global site tag (gtag.js) - Google Analytics