自定义标签(JSTL)
自定义标签的步骤:
1、确定需求,如:用<my:date/>输出当前时间
2、编写Java类:需要实现实现接口javax.servlet.jsp.tagext.JspTag
具体的接口为:
javax.servlet.jsp.tagext.SimpleTag,简单标签,JSP2.0**
javax.servlet.jsp.tagext.Tag,经典标签
3、编写tdl文件(xml)
Demo:
public class MyTag implements SimpleTag { private PageContext pageContext;
public void setJspContext(JspContext pc) { this.pageContext=(PageContext) pc;//设置pageContext
} public void doTag() throws JspException, IOException { SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS");
String date=format.format(new Date());
pageContext.getOut().print(date);//输出到页面
} public JspTag getParent() {
// TODO Auto-generated method stub
return null;
} public void setJspBody(JspFragment arg0) {
// TODO Auto-generated method stub }
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1"> <!-- 确定当前标签库的版本 -->
<tlib-version>1.0</tlib-version>
<short-name>my</short-name> <!-- 建议引入当前便签库是,使用的简写-->
<uri>http://www.cnblogs.com/liuwt365/mytag</uri> <!-- 为当前标签库配置文件,起一个名称 * 内容:自定义,全球唯一 --> <tag>
<name>date</name> <!-- 确定标签名称 -->
<tag-class>cn.test.simpleTag.MyTag</tag-class> <!-- 确定实现类 -->
<body-content>empty</body-content> <!-- 格式化当前标签的body内容-->
</tag> </taglib>
<%@ taglib uri="http://www.cnblogs.com/liuwt365/mytag" prefix="my" %> <!-- 页面注册 --> <my:date/>
PS:如果标签中含有属性,则tdl中需要设置:<my:maxValue num1="13" num2="15"></my:maxValue>
<tag>
<name>max</name>
<tag-class>cn.test.simpleTag.MyMaxTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>num1</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.Integer</type>
</attribute> <attribute>//设置属性
<name>num2</name>//属性名
<required>true</required>//是否必须 true|false (yes|no)(非必须)
<rtexprvalue>true</rtexprvalue> //runtime expression value 运行时表达式
<type>java.lang.Integer</type> //类型(非必须)
</attribute>
</tag>
如果含有标签体,tdl中设置如下:<my:toUpper>JUHjdksds</my:toUpper>
<tag>
<name>toUpper</name>
<tag-class>cn.test.simpleTag.MyToUpperTag</tag-class>
<body-content>scriptless</body-content> <!-- 确定标签体的类型
* empty:没有标签体
* JSP:支持JSP所有的语法,在Tag中使用
* scriptless:对于JSP页面的脚本不支持 <%%>
* tagdependent:标签体不做处理,原样输出
--> </tag>
如果含有标签体 ,java类中的
public void setJspBody(JspFragment jf) {
this.jspFragment=jf; //获取
}
向jsp页面输出时
StringWriter stringWriter=new StringWriter();//获得流 this.jspFragment.invoke(stringWriter);//将数据写入到流中
String data=stringWriter.toString().toUpperCase(); this.pageContext.getOut().print(data);
this.jspFragment.invoke(pageContext.getOut())=this.jspFragment.invoke();
自定义标签(JSTL)的更多相关文章
- 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例
EL应用 自定义一个标签,实现两个字符串的相加 1回顾 1.1servlet生命周期 init(ServletConfig) service ...
- javaEE(7)_自定义标签&JSTL标签(JSP Standard Tag Library)
一.自定义标签简介 1.自定义标签主要用于移除Jsp页面中的java代码,jsp禁止出现一行java脚本. 2.使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: •编写一个实现T ...
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...
- Java Web 自定义标签
1. 自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...
- JSTL 自定义标签
编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签 package test.yz; import java.io.IOException; impor ...
- 使用自定义标签模拟jstl的<c:for each>标签
一.自定义标签的基本编写 下面编写一个自定义标签,它可以输出当前的时间. 1.编写标签类 类可以通过继承SimpleTagSupport类实现一个标签类编写.父类为我们提供了一些编写自定义标签的快捷的 ...
- 自定义标签 与 JSTL(JSP Standard Tag Library)
1.自定义标签 [理解] [1]简介 > 在JSP2.0以后,在jsp页面中不建议使用脚本片段<% %>和JSP表达式<%= %> ...
- JSTL自定义标签
这节我们总结一下JSTL自定义标签相关内容. 1. 自定义标签简介 自定义标签主要用于移除JSP页面中的Java代码.Jsp页面主要是用来显示给前台的,如果里面有过多的java代码的话,会显得很乱,但 ...
- 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签
学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分 ...
- Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架
JSTLApache提供的标签库 jar包:jstl-1.2.jar,如果传MyEclipse,他会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入.--------- ...
随机推荐
- Android onActivityResult 设置requestCode 返回的code不对
今天在项目里用到 Intent intent=new Intent(getActivity(), Test.class);startActivityForResult(intent, 1); onAc ...
- 实用C51编程的高级技巧(C51编程)
一.C51热启动代码的编制 void main() { char data *HotPoint=(char *)0x7f; if((*HotPoint==0xaa)&&(*(--Hot ...
- C++中对sprintf()函数的说明(转)
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出 ...
- Web.Config 对静态文件 js css img 的客户端缓存策略
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.we ...
- Linux标准输入、输出和错误和文件重定向(转) --- good
标准输入.输出和错误 当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名.下面就是这些文 ...
- FE: Responsive Web Design Overview
布局特点 1. 单列布局 vs 水平布局 手机屏幕宽度较小,因此多采用单列布局. 反观桌面网页设计,为了利用宽度,往往使用各种水平布局的组件,诸如水平导航栏,水平按钮组,水平分页等.然而水平布局 ...
- 【转】Win8/8.1/Win7小技巧:揪出C盘空间占用的真凶
原文网址:http://www.ithome.com/html/win8/55496.htm 不少使用Win8.Win8.1的用户不难发现,原先只占用20G大小的系统盘,随着使用时间的增加,C盘的磁盘 ...
- cf509E Pretty Song
E. Pretty Song time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 命名实参和可选实参(C# 编程指南)
https://msdn.microsoft.com/zh-cn/library/dd264739.aspx CalculateBMI(weight: 123, height: 64); Calcul ...
- ACM2114_S[I](1^3+2^3+3^3)
#include<iostream> using namespace std; int main() { __int64 n,m,i,j,sum; while(cin>>n) ...