[原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.带变迁体的自定义标签
1). 若一个变迁含有标签体,如:<jason:testJspFragment>hello word</jason:testJspFragment>
在自定义标签的标签处理器中使用 JspFragment 对象封装标签体信息
2). 若配置的标签含有标签体,则JSP引擎会自动的调用 setJspBody() 方法,把 JspFragment 传递给标签自定义的处理器类,在SimpleTagSupport中还定义 了一个getBody()方法,用于返回 JspFragment 对象
3). JspFragment 的 invoke(Write) 方法:把标签体内容从 Writer 中输入,若为null ,则等同于 invoke(getJspContext.getOut()),即直接把标签体内容出到页面上
TestJspFragment.jsp
package com.jason.tag.mytag; import java.io.IOException;
import java.io.StringWriter; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport; public class TestJspFragment extends SimpleTagSupport{ @Override
public void doTag() throws JspException, IOException {
JspFragment bodyContent = getJspBody();
//JspFragment.invoke(Writer) : Writer 即为标签体内容输出的字符流,
//若为null,则输出到getJspContext().getOut() 即输出到页面上
//bodyContent.invoke(null); //1.先用 StringWriter 得到标签体的内容
StringWriter sw = new StringWriter();
bodyContent.invoke(sw); //2.把标签体的内容变成大写
String content = sw.toString().toUpperCase(); //3.获取jsp 页面的out隐含对象,输出到页面
getJspContext().getOut().print(content); } }
4). 在 tld 文件中使用<body-content></body-content> 来描述标签体的类型:
empty:没有标签体
scriptless:标签体可以包含 el 表达式和 JSP 动作元素,但不能包含 JSP 的脚本元素。大部分取值,采用EL表达式
tagdependent:表示标签体交由标签本身去解析处理。若指定 tagdependent,在标签体中的所有代码都会原封不动的交给标签处理器,而不是将执行结果传递给标签处理器
<!-- 带标签体的自定义标签 --> <tag>
<name>testJspFragment</name>
<tag-class>com.jason.tag.mytag.TestJspFragment</tag-class>
<body-content>scriptless</body-content> </tag>
2.带父标签的自定义标签
1.父标签无法获取子标签的引用,父标签只是把子标签当做标签体来使用
2.子标签可以通过 getParent() 方法获取父类,方法来自父标签的应用(或者继承 SimpleTagSupport ):若子标签的确有父标签,JSP 引擎(tomcat)会把代表 父标签的引用通过 setParent(JspTag parent) 赋给标签处理类
注意:父标签的类型是 JspTag 类型。该接口是一个空接口,是来统一 SimpleTag 和 Tag 的。可以通过类型强转
3.在 tld 配置文件中,无需为父标签有额外的配置,但,子标签是以变前体的范式存在的,所以父标签的 <body-content>scriptless</body-content>
Mytag.tld
<!-- 包含父标签的自定义标签 -->
<tag>
<name>parentTag</name>
<tag-class>com.jason.tag.mytag.ParentTag</tag-class>
<body-content>scriptless</body-content>
</tag> <tag>
<name>sonTag</name>
<tag-class>com.jason.tag.mytag.SonTag</tag-class>
<body-content>empty</body-content>
</tag>
SonTag.java
package com.jason.tag.mytag; import java.io.IOException; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTagSupport; public class SonTag extends SimpleTagSupport{ @Override
public void doTag() throws JspException, IOException {
//1.得到 父标签的引用
JspTag parent = getParent(); //2.获取父标签的 name 属性
ParentTag parentTag = (ParentTag) parent;
String name = parentTag.getName(); //3.把 name 值打印到 jsp 页面上
getJspContext().getOut().print("子标签输出name:" + name); }
}
Parent.java
package com.jason.tag.mytag; import java.io.IOException; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport; public class ParentTag extends SimpleTagSupport{ private String name = "jason"; public String getName() {
return name;
} @Override
public void doTag() throws JspException, IOException {
System.out.println("parent tag name" + name);
getJspBody().invoke(null); }
}
3.EL 自定义函数。El中还是有很多的不同的定义好的函数
1.EL 自定义函数:在 EL 表达式中调用的某个 Java 类的静态方法,这个静态方法需在 web 应用程序中进行配置才可以被 EL 表达式调用.
EL 自定义函数可以扩展 EL 表达式的功能,让 EL 表达式完成普通 Java 程序代码所能完成的功能
2.EL 自定义函数开发步骤
1)编写 EL 自定义函数映射的Java 类中的静态方法: 这个 Java 类必须带有 public 修饰符,方法必须是这个类的带有 public 修饰符的静态方法
MyELFunc.java
package com.jason.tag.mytag;
public class MyELFunc {
public static String concat(String str1,String str2){
return str1 + str2;
}
}
2)编写标签库描述文件(tld 文件), 在 tld 文件中描述自定义函数
mytag.tld
<!-- 描述 el 自定义函数 --> <function>
<name>concat</name>
<function-class>com.jason.tag.mytag.MyELFunc</function-class>
<function-signature>java.lang.String concat(java.lang.String ,java.lang.String )</function-signature>
</function>
3)在 JSP 页面中导入和使用自定义函数
${jason:concat("64645646","132135") }
EL中的函数


小结
1.创建标签处理类:继承SimpleTagSupport
2.编写tld文件,<short-name> <uri> 很重要
3.带标签体的标签,带父标签的标签,EL的自定义函数
[原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结的更多相关文章
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记41:简单标签之带属性的自定义标签(输出指定文件,计算并输出两个数的最大值 demo)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记16:JSP指令(page,include),JSP标签(forwar,include,param)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- .NET CORE 2.0小白笔记(三):数字化平台之微信平台策略
当下,互联网技术正在深刻地重构我们的社会,各大企事业单位——大到万人集团公司,小到图文复印店——都在争先恐后地从所谓的“传统行业”中脱胎换骨一番以完成数字化转型. 在这个过程中,“企业即IT”.“科技 ...
- Android基础之使用Fragment控制切换多个页面
Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序 ...
- firewalld实现网关功能
用ip a查看自己的路由服务器接口,一个外网接口 wan ,还有内网接口: 我这里是一块网卡,配了一个虚拟ip,eth0: wan口 eth0:1 lan口 注意:要注意顺序,先将接口加到zone ...
- laravel学习之路1:认证相关
Laravel中Auth::guard()表示什么意思? Auth::check() 是判断用户是否登录的方法,如果使用的默认用户系统,那这样使用没问题. 但是使用两组用户的话,如何使用各组用户的功能 ...
- 为什么要用markdown写作
无论是 EPUB, mobi,还是 Kindle 用的专有格式 .azw,都只是把一堆 `HTML 文件打包`而已.如果你写的是书,用 Markdown 标注格式之后,可以很方便地转为以上格式 使用W ...
- 爬虫的原理获取html中的图片到本地
如果你想获取哪个网页的图片,如果你想知道那个网址的美女,还等什么.代码走起:下载即可使用 完成这次瞎爬的原理如下: 第一步:获取html内容 * 第二步:然后在获取的html文本中寻找图片,根据htm ...
- #region的作用和注释快捷键
让函数在编辑器中收起来,简洁 #region All MenuItems [@MenuItem("xxx")] public static void Init() { XXXXX; ...
- Linux中的关机
我是用普通用户登录,在终端下输入shutdown命令,结果显示 command not found.这就奇怪了,难道我的linux不支持这个命令?man了一下shutdown,大篇幅的说明告诉我,我的 ...
- C++中面向对象的理解
1.对于OO(面向对象)的含义,并非每一个人的看法都是同样的. 即使在如今.假设问十个人,可能会得到15种不同的答案.差点儿全部的人都会允许继承和多态是OO中的概念.大多数人还会再加上封装. 另 ...
- python 基础 9.7 创建表
一. 创建表 #/usr/bin/python #-*- coding:utf-8 -*- #@Time :2017/11/22 18:05 #@Auther :liuzhenchuan #@Fi ...