文档章节

如何编写jstl自定义标签(示例:自定义jstl Long型时间转为date型)

Jiangnan_
 Jiangnan_
发布于 2016/03/08 10:40
字数 766
阅读 22
收藏 0

趁着现在睡不着抓紧 把原来想写的都写了吧、、 咳咳

写jsp不可避免的会用到jstl,因为这个公司也没怎么用过velocity等模板,所以jstl就相对来说是比较简单的写法了。

页面有需要时间格式化的东西,看到代码中,之前他们做的是一个model类从索引或者缓存中获取到数据后有一个时间格式

为long型, 而页面上显然是不可能以long型展示给用户的,之前的写法是获取model之后写个for循环把这个long型转成想要展示的类型

存入list,然后再页面跟随这这个model进行获取,显然这种做法很是不可取的,一旦某个环节出了问题,小点说就窜行了,

至于大问题、、咳咳 我就说不准了。。。。

jstl有很多时间格式化的标签,但貌似只是支持date型的,更多的我也没去细搜,不过貌似就是不支持long型,其实long型对我们也是很有

用的,比如说按时间排序、、很方便是不是、 在jstl里就比较麻烦了,好在jstl可以写自定义标签,写这篇文章的目的其实也不只是介绍这个

long型时间格式化问题,主要还是怎么写自定义标签、、咳咳不多说废话了直接上代码吧

package com.controller.touch;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * 用于页面jstl时间格式化
 * @author jiangnan
 *
 */
public class JSTLDateUtils extends TagSupport {

    /**
     * 
     */
    private static final long serialVersionUID = -3354015192721342312L;
    private String value;
    public void setValue(String value) {
        this.value = value;
    }
        private String parttern;
    public void setValue(String parttern ) {
        this.value =  parttern ;
    }
    public int doStartTag() throws JspException{
        String vv = String.valueOf(value);  
        long time = Long.valueOf(vv);  
        Calendar c = Calendar.getInstance();  
        c.setTimeInMillis(time);  
        SimpleDateFormat dateformat =new SimpleDateFormat(parttern);  
        String s = dateformat.format(c.getTime());  
        try {  
            pageContext.getOut().write(s);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return super.doStartTag();
    }
    public static void main(String[] args) {
        long a =1332744845078l;
         long time = Long.valueOf(a);  
            Calendar c = Calendar.getInstance();  
            c.setTimeInMillis(time);  
            SimpleDateFormat dateformat =new SimpleDateFormat("MM-dd HH:mm");  
            String s = dateformat.format(c.getTime());  
        System.out.println(s);
    }
}




在web.xml 中要添加这些东西:

1 <!-- 自定义JSTL时间格式化 --> 2 <jsp-config> 3 <taglib> 4 <taglib-uri>/tags</taglib-uri> 5 <taglib-location>/WEB-INF/datetag.tld</taglib-location> 6 </taglib> 7 </jsp-config>

datetag.tld则按下面书写

 1 <?xml version="1.0" encoding="UTF-8"?>  2 <taglib>  3 <tlib-version>1.1</tlib-version>  4 <jsp-version>1.2</jsp-version>  5 <short-name>date</short-name>//这里说明一下,开始我也没加这个东西,但是发现resin疯狂的报错啊,后来才发现resin对tld文件做严格语法检查,所以一定要加上这个  6 <tag>  7 <name>date</name>  8 <tag-class>com.controller.touch.JSTLDateUtils</tag-class>  9 <attribute> 10 <name>value</name> 11 <required>true</required> 12 <rtexprvalue>true</rtexprvalue> 13 </attribute> 14 <attribute> 15 <name>parttern</name> 16 <required>true</required> 17 <rtexprvalue>true</rtexprvalue> 18 </attribute> 19 </tag> 20 </taglib>

最后jsp中就可以使用如下标签进行写代码了

<date:date value="${time}" pattern="yyyy-MM-dd HH:mm:ss"/>

别忘记在页头加上引用 <%@ taglib uri="/tags" prefix="date"%> 否则会报错哦  

如果想使用多个自定义的标签可以编写多个类,然后再tld中进行添加对用的tag就可以啦

© 著作权归作者所有

共有 人打赏支持
Jiangnan_
粉丝 1
博文 16
码字总数 4729
作品 0
海淀
私信 提问
Servlet 3.0 特性详解

Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为...

那位先生
2015/06/12
0
0
【J2EE】- JSP自定义标签

用途:在进行JSP页面显示处理的时候,有时候JSTL/Struts/Spring提供的标签库并不能满足项目中显示的需求,特别是对一些要求比较高的定制化服务中,可以使用自定义的标签库去处理。 JSP自定义...

ZeroneLove
03/03
0
0
Spring容器启动后注入service到Servlet并自动执行

通常做法是定义一个Servlet,并在web.xml中配置Servlet的启动顺序<load-on-startup>的值在DispatcherServlet之后。但这样做的缺点是在Servlet中无法使用Spring的依赖注入功能,只能使用WebAp...

harries
2014/10/18
0
1
(JavaEE-10)自定义标签库

自定义标签库开发 自定义标签简介 自定义标签主要用于移除Jsp页面中的java代码 使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤 编写一个实现Tag接口的Java类(标签处理器类)...

_-Leon-_
2014/07/12
0
0
SoybeanMilk-1.0-b4 Java MVC开发框架发布

SoybeanMilk-1.0-b4 做了较大的改进,包括: 增强泛型类型支持,框架现在支持自动将请求参数转换为调用方法的泛型类型参数 为标签增加“breaker”属性,用以控制调用方法是否执行 一个新的转...

鉴客
2011/11/03
313
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
3
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部