`

Struts2.X自定义标签(时间标签)

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

第一步:
首先编写时间格式转换的方法:
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)+"分钟前";
		}
	}
这段代码很简单,相信大家一看便懂了。
下面是距离当前时间天数的方法:
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;
	    }   
}

这里是写一个方法调用这个算法返回一个值
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
<?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" />这样就可以了。是不是很简单呢。
分享到:
评论
1 楼 yisafe 2009-07-26  
沙发!好贴!

相关推荐

    struts1.x标签详解

    PDF版的struts1.x标签详解,可作为参考资料

    Struts1.x.pdf

    :Struts提供了下面这些组件使用MVC开发应用程序: ·Model:Struts没有提供model类。这个商业逻辑必须由Web应用程序的开发者以JavaBean 或EJB的形式提供;...此外,Struts提供了自定义JSP标签库,辅助开发者用JSP

    Struts2入门教程(全新完整版)

    10.为什么要使用struts2代替struts1.x 7 二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7....

    JSP自定义标签分页

    JSP自定义标签分页+Struts1.x标签,包含标签分页类、标签tld文件、web.xml配置和调用例子,非常地简单。 只要在Action传request.setAttribute("listUser", listUser);到JSP即可实现自动分页,输出分页样式可以自己去...

    struts2标签库

    在早期的WEB开发中,JSP视图控制和显示技术主要依靠Java脚本来实现,这样一来,JSP页面重新嵌入了大量的Java脚本代码,给...Struts2标签库相对struts1.x进行了巨大的改进,支持OGNL表达式,不再依赖任何表现层技术。

    struts2 标签库 帮助文档

    Struts 2 标签库(文档手册) Tags-API-CLSW-JSP &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. &lt;s:a href=""&gt;&lt;/s:a&gt;-...

    Java.Web整合开发王者归来.part2.rar (共3部分)

    第3篇为高级篇,内容包括JSTL标签库的 使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等 ;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate...

    jsp自定义分页标签

    一个分页标签,只需使用一个标签就可以输出分页信息。配有示例,示例中使用了Struts 1.x + Hibernate, 不用这两个框架的话稍微做些修改就可以了,比较简单,就不啰嗦了,基本使用方法都差不多,有错误指出欢迎指正。

    Java.Web整合开发王者归来.part2

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等; 第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容; 第5篇为Hibernate...

    Java Web整合开发王者归来2/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括Struts 2.x中的内容;第5篇为Hibernate...

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架...

    Java.Web整合开发王者归来.part1

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等; 第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容; 第5篇为Hibernate...

    Java.Web整合开发王者归来.part3

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等; 第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容; 第5篇为Hibernate...

    Java Web 整合开发王者归来9/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括Struts 2.x中的内容;第5篇为Hibernate...

    Java Web整合开发王者归来1/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架...

    Java Web整合开发王者归来10/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括Struts 2.x中的内容;第5篇为Hibernate...

    Java Web整合开发王者归来12/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括Struts 2.x中的内容;第5篇为Hibernate...

    Java Web整合开发王者归来16/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括Struts 2.x中的内容;第5篇为Hibernate...

    Java Web整合开发王者归来3/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括Struts 2.x中的内容;第5篇为Hibernate...

    Java Web整合开发王者归来6/16

    第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、 资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内 容,也包括Struts 2.x中的内容;第5篇为Hibernate...

Global site tag (gtag.js) - Google Analytics