自定义JSTL标签和函数库
一、自定义JSTL标签
1.编写标签处理类:
(1)实现 SimpleTag 接口,通过 setJspContext()方法可以获取到 jspContext 对象,实际上也是 pageContext 对象。
在 doTag() 方法中完成逻辑,通过 JspWriter out = jspContext.getOut(); 获取到的 out 对象,可以输出到页面。如:
/**
* MyTag2
*
* @author solverpeng
* @create 2016-07-03-10:20
*/
public class MyTag2 implements SimpleTag {
private JspContext jspContext = null;
@Override
public void doTag() throws JspException, IOException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dataStr = simpleDateFormat.format(new Date());
JspWriter out = jspContext.getOut();
out.write(dataStr);
} @Override
public void setParent(JspTag jspTag) { } @Override
public JspTag getParent() {
return null;
} @Override
public void setJspContext(JspContext jspContext) {
this.jspContext = jspContext;
} @Override
public void setJspBody(JspFragment jspFragment) { }
}
MyTag2
(2)在 WEB-INF 下新建自定义 tld 文件,可以参考 JSTL 本身一些标签的的实现,如 c.tld。然后注册标签。如:
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"> <display-name>solverpeng core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>solverpeng</short-name>
<uri>http://solverpeng.com/tags</uri> <tag>
<name>showDate</name>
<tag-class>com.nucsoft.myservlet.tag.MyTag2</tag-class>
<body-content>empty</body-content>
</tag> </taglib>
solverpeng core tag
(3)在页面中导入自定义的标签库,然后使用。如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="http://solverpeng.com/tags" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<s:showDate/>
</body>
</html>
tag.jsp
2.继承 SimpleTagSupport。其中在 SimpleTagSupport 类中已经完成了对 JspTag、JspContext,JspFragment 的注入操作,可以直接使用。
3.需要注意的地方
在自定义标签tld文件中,tag 节点里的 body-content 节点内容有四个可选值,分别介绍一下:
(1)tagdependent:将标签体的内容不经过任何修改和处理原封不动的交个标签处理类
(2)empty:没有任何标签体
(3)scriptless:表示标签体支持纯文本、EL表达式、JSTL等标签,不支持JSP脚本片段和JSP表达式
(4)JSP:在 SimpleTag 标签体系下不可用
可以通过 jspContext 获取到其他8大 JSP 隐含对象。
如果为带属性的自定义标签,在目标处理类中通过提供 setXxx() 方法来获取,在 tld 文件中,需要在 tag 元素中添加子节点 attribute 。
其中对 attribute 节点下的三个子节点进行说明:
(1)name:属性名称,和目标处理类中通过 setXxx() 方法定义的属性名一致
(2)required:是否是必须输入的
(3)rtexprvalue:是否支持 EL 表达式
如果需要对标签体处理,需要在目标处理类中进行一系列的处理:
(1)在 doTag() 方法中通过 this.getJspBody() 可以获取到 JspFragment 对象
(2)执行 JspFragment 对象的 invoke() 方法,若不需要对执行后的标签体进行处理,而是直接输出的话,invoke() 方法的参数传入 null就 ok。
若是需要对执行后的标签体进行处理,则需要传入一个 Write 对象,在调用 invoke() 方法之后,然后对 Write 对象进行处理。如:
JspFragment jspBody = this.getJspBody();
StringWriter out = new StringWriter();
jspBody.invoke(out);
String content = out.toString();
String result = content.toUpperCase();
JspWriter writer = this.getJspContext().getOut();
writer.print(result);
二、自定义JSTL函数库
1.定义函数处理类,要求类和方法必须为 public ,且方法必须为 static 。如:
/**
* @author solverpeng
* @create 2016-07-03-10:34
*/
public class MyFunction {
public static String hello() {
return new Date().toString();
}
}
MyFunction
2.在 WEB-INF 下新建自定义 tld 文件,可以参考 JSTL 本身一些标签的的实现,如 c.tld。然后注册函数。如:
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0"> <display-name>solverpeng core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>solverpeng</short-name>
<uri>http://solverpeng.com/tags</uri> <function>
<name>hello</name>
<function-class>com.nucsoft.myservlet.function.MyFunction</function-class>
<function-signature>java.lang.String hello()</function-signature>
</function>
</taglib>
solverpeng tag tld
3.在JSP页面中导入自定义的函数库,然后在页面中使用,如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="http://solverpeng.com/tags" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${s:hello()}
</body>
</html>
tag.jsp
三、JSTL中一个不常用的标签 c:forTokens
<% pageContext.setAttribute("str", "aa,bb,ee,mm,tt"); %>
<c:forTokens items="${str }" delims="," var="item">
${item }
</c:forTokens>
c:forTokens
自定义JSTL标签和函数库的更多相关文章
- 自定义EL函数、自定义JSTL标签
自定义EL函数 1.做一个类(静态) package com.maya.el; public class ELBiaoDaoShi { public static String TiHuan(Stri ...
- 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法
如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...
- 自定义jstl标签库
开发环境:Spring+SpringMVC +Maven +Mybatis JSTL 标签库的配置: 导入对应的 jstl.jar 和 standard.jar ,我使用的配置如下: <prop ...
- (十三)自定义JSTL标签
前面的博客,我们讲过了 自定义 el函数 : 讲一个 自定义标签技术 : 目录 自定义标签 快速入门:使用标签输出客户机IP 关于标签处理器类的方法 自定义标签功能扩展 传统标签 简单标签 配置简单标 ...
- JSTL标签(核心标准库)
使用JSTL标签步骤 1) 导入jstl支持的jar包(标签背后隐藏的java代码) 注意:使用javaee5.0的项目自动导入jstl支持jar包 2)使用taglib指令导入标签库 <%@t ...
- 自定义jstl标签开发
从jsp1.1开始就可以在jsp页面中使用自定义标签了,使用自定义标签不但可以实现代码重用,而且可以使jsp代码更简洁.Jsp2.0的标签扩展API中又增加了SimpleTag接口和其实现类Simpl ...
- 自定义jstl标签*
原文链接:https://www.it610.com/article/442039.htm 步骤如下: 1.写tld文档:用来指定标签的名字,标签库等. 2.写标签处理器类. 3.配置到web.xml ...
- 页面中基于JSTL标签调用函数--之${fn:}内置函数
调用这样一个头文件<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions " ...
- Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库
前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...
随机推荐
- [aaronyang]WPF4.5 - AyTabControlBase样式分享,绝对好看
样式代码如下: 对于博客园将文章移除首页的做法:我就迁移了.文章已经迁移:http://www.ayjs.net/post/75.html 由于例子比较简单,你只要指定Style即可,难点,透明区域的 ...
- 【转】Windows Phone 8 开发环境的搭建
1.先安装Microsoft Visual Studio 2012旗舰版,安装包自己下载. 系统必须是Win8 X64 对于软硬件的检测可以参照: Windows Phone 8开发环境搭建之一.电脑 ...
- 地铁沉降观测数据分析之巧用VBA编程处理
地铁沉降观测数据分析之巧用VBA编程处理 当你观测了一天累的要死了,回来看着成百上千的测量数据,还要做报表.如果是三五页报表还好说,如果是2000个点的报表 按照一页纸张报30个点就得大约70页的报表 ...
- 使用adb shell dumpsys检测Android的Activity任务栈
谈起Android程序开发,就需要了解其四个主要的部件:Activity.Service.ContentProvider. BroadcastReceiver.而其中Activity是唯一直接控制程序 ...
- 2.C#自定义Attribute
阅读目录 一:C#自定义Attribute 二:AttributeUsageAttribute中的3个属性(Property)中的AttributeTargets 三:Attribut ...
- 用Eclipse运行Android版APP(PhoneGap)时出现:Unable to execute dex: Multiple dex files define
这两天遇到点小问题,做个记录: 症状:运行,调试时都报:Unable to execute dex: Multiple dex files define错误,发布后的APP安装到手机后一运行,就提示: ...
- iOS CoreData技术学习资源汇总
一.CoreData学习指引 1. 苹果官方:Core Data Programming Guide 什么是CoreData? 创建托管对象模型 初始化Core Data堆栈 提取对象 创建和修改自定 ...
- WeifenLuo组件中如何设置停靠窗体的宽度
在项目中使用了WeifenLuo.WinFormsUI.Docking组件,窗体停靠效果非常棒. 现在项目出现了这样的需求,希望可以控制停靠窗体的宽度,因为默认的宽度往往会造成停靠窗体的内容显示不完全 ...
- 8个经典炫酷的HTML5 Canvas动画欣赏
HTML5非常强大,尤其是Canvas技术的应用,让HTML5几乎可以完成所有Flash能完成的效果.本文精选了8个经典炫酷的HTML5 Canvas动画欣赏,每一个都提供全部的源代码,希望对你有所帮 ...
- __declspec(dllimport)
我相信写WIN32程序的人,做过DLL,都会很清楚__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法.当然,如果你的DLL里全是C++的类的话 ...