javaweb中带标签体的自定义标签
1.完整的示例代码:
标签体的处理器类,JspFragmentTest.java
package com.javaweb.tag; 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 JspFragmentTest extends SimpleTagSupport {
public void doTag() throws JspException,IOException{
JspFragment bodyContent=getJspBody();
//JspFragment.invoke(Writer):Writer即为标签体内容输出的字符流,若为null,
//则输出到getJspContext().getOut(),即输出到页面上。
//bodyContent.invoke(null);
//利用StringWriter得到标签体的内容
StringWriter sw=new StringWriter();
bodyContent.invoke(sw);
//把标签体的内容都变为大写
String content =sw.toString().toUpperCase();
//获取jsp页面的out隐含对象,输出到页面上
getJspContext().getOut().print(content);
}
}
tld文件,jspfragment.tld
<?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">
<description>MyTag 1.1 core library</description>
<display-name>MyTag core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>c</short-name>
<uri>http://java.koala.com/jsp/jstl/core</uri>
<tag>
<name>jspFragmentTest</name>
<tag-class>com.javaweb.tag.JspFragmentTest</tag-class>
<body-content>scriptless</body-content>
</tag>
</taglib>
jsp调用文件,jspFragmentTest.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.koala.com/jsp/jstl/core" prefix="koala"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'jspFragmentTest.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<koala:jspFragmentTest>Hello,koala!</koala:jspFragmentTest>
</body>
</html>
1.1 若一个标签有标签体,类似于<koala:jspFragmentTest>Hello,koala!</koala:jspFragmentTest>,在自定义标签的标签处理器中使用JspFragment对象封装标签体信息。
1.2 若配置了标签含有标签体,则jsp引擎会调用setJspBody()方法把JspFragment传递给标签处理器类。在SimpleTagSupport中还定义了一个getJspBody()方法,用于返回JspFragment对象。
1.3 JspFragment的invoke(Writer)方法:把标签体内容从Writer中输出,若为null,则等同于invoke(getJspContext().getOut()),即直接把标签体内容输出到页面上。有时,可以借助于StringWriter,可以在标签处理器中先得到标签体的内容:
//利用StringWriter得到标签体的内容
StringWriter sw=new StringWriter();
bodyContent.invoke(sw);
1.4 在tld文件中,使用body-content节点来描述标签体的类型:
<body-content>:指定标签体的类型,大部分情况下,取值为scriptless。可能取值有三种:
empty:没有标签体
scriptless:标签体可以包含el表达式和jsp动作元素,但不能包含jsp的脚本元素;
tagdependent:表示标签体由标签本身去解析处理。若指定为tagdependent,在标签体中的所有代码都会原封不动地交给标签处理器,而不是将执行结果交给标签处理器。
javaweb中带标签体的自定义标签的更多相关文章
- [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- JSP带有标签体的自定义标签
新建OutTag类 如何添加jsp-api.jar包 OutTag类详细代码 ``` package bid.zhazhapan.fims.tag; import javax.servlet.jsp. ...
- JavaWeb(七):EL表达式、自定义标签和JSTL
一.EL表达式 语法 el.jsp <%@page import="java.util.Date"%> <%@page import="com.atgu ...
- 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签
学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分 ...
- jsp的标签库和自定义标签
1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. ...
- Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架
JSTLApache提供的标签库 jar包:jstl-1.2.jar,如果传MyEclipse,他会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入.--------- ...
- JSP自定义不带属性和标签体的简单标签
1. 新建HelloTag类 2. 添加额外的Jar包 (1). 右键项目 -> Build Path -> Configure Build Path -> Libraries -& ...
- javaweb学习总结(二十三)——jsp自定义标签开发入门
一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...
- Java基础83 JSP标签及jsp自定义标签(网页知识)
1.JSP标签 替代jsp脚本,用于jsp中执行java代码1.1.内置标签: <jsp:forward></jsp:forward> 相当于:request.getReu ...
随机推荐
- 洛谷P5264 【模板】多项式三角函数
题面 传送门 题解 据说有一个叫做欧拉公式的东西 \[e^{ix}=\cos(x)+i\sin(x)\] 别问我为啥我今天第一次看到它 那么显然也有 \[e^{-ix}=\cos(x)-i\sin(x ...
- MySQL5.7 mysql.user创建用户
mysql -uroot -proot MySQL5.7 mysql.user表没有password字段改 authentication_string: 一. 创建用户: 命令:CREATE USER ...
- [Swift实际操作]八、实用进阶-(4)通过protocol在两个对象中进行消息传递
本文将演示如何借助协议,实现视图控制器对象和其内部的自定义视图对象之间的数据传递. 首先创建一个自定义视图对象.在项目名称文件夹点击鼠标右键New File ->Cocoa Touch Clas ...
- docker导入导出镜像
docker容器导入导出有两种方法: 一种是使用save和load命令 使用例子如下: docker save ubuntu:load>/root/ubuntu.tar docker load& ...
- freemarker模板跟java代码放在一起
在配置 freemarkerConfig时加上 <property name="templateLoaderPath" value="classpath:hello ...
- KEY
typedef struct st_key { uint key_length; /* Tot length of key */ ulong flags; /* dupp key and pack f ...
- Mockplus原型设计工具介绍
一.原型设计工具简介 Mockplus (摹客) 一种快速原型设计工具 官网提供四个平台的下载,通用性很广. 二.原型设计的模板 Mockplus可以为设计者提供以下几种模板 其中在“手机”模板里, ...
- (转载)一位资深程序员大牛给予Java初学者的学习建议
这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议? 今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要 ...
- USART列子
#include "stm32f10x.h" void USART_INit(void) { GPIO_InitTypeDef GPIO_Initstructe; USART_In ...
- IBM Worklight OutOfMemoryError: Java heap space 错误
在启动 IBM Worklight 6.0 server 的时候,报了一个 OutOfMemory 的错误: [INFO ] FWLSE4006I: Worklight Studio is ...