- 浏览: 205827 次
- 性别:
- 来自: 紫禁城
文章分类
最新评论
-
a1439226817:
<!doctype html><html l ...
发布一个支持N级下拉列表联动的控件 -
a1439226817:
也不高个测试的demo,别人怎么用啊
发布一个支持N级下拉列表联动的控件 -
davaidgao:
不全啊,这是
Spring3.x权威开发指南 -
caizi12:
对于map绑定很是不方便,现在的做法,需要创建一User类,再 ...
浅谈 SpringMVC 数据绑定 -
joeyhuang:
不全啊..
Spring3.x权威开发指南
自定义标签:
JavaBean和自定义标签的区别:它们都是一个可重用的组件,自定义标签可以与jsp页面通信,javabean不行,它只是一种数据模型,标签可以显示数据,javabean是被动的,等jsp来调用,自定义标签可以操纵jsp,是jsp的一部分. 标签体可以包含文本,jsp脚本,jsp表达式,EL表达式,后三种是把执行结果当作文本来处理.
通常我们写的标签处理文件,Servlet,JavaBean等只要是java类都要存在classes目录下,或者把它们打包成一个jar包存在lib目录下,properties文件放在classes目录下,即类装载器目录下.也可以打包成jar文件放到lib目录下.tld文件不能放在classes或者lib目录下,只能放在WEB-INF目录或其子目录下.
标签处理文件的功能:
★是否让web容器执行标签体,
★是否重复执行标签体,
★是否输出标签体之前修改标签体的执行结果.
★是否执行结束标签后的jsp页面.
自定义标签几个重要的接口:
1).Tag接口常用的方法和常量:
EVAL_BODY_INCLUDED,SKIP_BODY,EVAL_PAGE,SKIP_PAGE,setPageContext(),
setParent(),getParent(),doStartTag(),doEndTag(),release(),这些方法的调用顺序如下:
setPageContext()—>setParent()—>setters()—>doStartTag()—>doEndTag()—>release().
2).IterationTag接口,继承自Tag接口,常用的方法和常量:
EVAL_BODY_AGAIN,doAfterBody()
3).BodyTag接口,继承自IterationTag接口,常用的方法和常量:
EVAL_BODY_BUFFERED,setBodyContent(),doInitBody()(初始化Body对象).
在jsp的API中BodyTagSupport类已经实现上面的接口,所以我们在编写自定义标签时只需继承这个类,根据需求重写它的一些方法就可以了.
doStartTag():
是否执行自定义标签的标签体,是否创建一个缓冲区对象捕获标签体的执行结果,从而让标签开发者在标签处理种对标签体的执行结果进行修改,其返回值可以是一下三个:
EVAL_BODY_INCLUDE(执行标签体),
SKIP_BODY(跳过标签体),
EVAL_BODY_BUFFERED(把标签体放到缓冲区中,以便进一步处理).
doAfterBody():
其返回值可以为:
EVAL_BODY_AGAIN(表示再执行标签体一次),
SKIP_BODY(表示结束标签体执行继续执行doEndTag)
doEndTag():
控制是否执行结束标签后面的内容, 其返回值可以为:
EVAL_PAGE(表示继续执行结束标签后面的jsp代码);
SKIP_PAGE(表示忽略结束标签后面的jsp代码).
setPageContext():把PageContext传给标签处理器.
setParent():如果自定义标签有父标签,则把父标签传给标签处理器,没有则把null传给标签处理器.
TLD文件简介:
如果 JSP 容器在转换时遇到了自定义标签,那么它就检查标签库描述符(tag library descriptor)(TLD)文件以查询相应的标签处理程序。TLD 文件对于自定义标签处理程序,就像 Web 部署描述符对于 servlet 一样。TLD 文件通常保存在 Web 应用程序的WEB-INF目录,它们一般以.tld扩展名结束。下面就是一个简单的tld文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>name</short-name>
<tag>
<name>MyTagName</name>
<tag-class>标签处理文件的完整的类名</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>
让我们更详细地分析一下这些标签:
- TLD 文件的根元素是</taglib>.它描述了一个标签库 —— 即一组标签/标签处理程序对。
- <tlib-version>元素对应于标签库版本。
- <jsp-version>对应于标签库所依赖的 JSP 技术的版本。
- <short-name>元素定义了 IDE 和其他开发工具可以使用的标签库的简单名。
- <taglib>元素包含许多<tag>元素,标签库中每一个标签有一个<tag>元素。
<body-content>这里可以有四个值</body-content>
empty:表示不能有标签体
JSP:标签体可以是任意一种JSP页面元素
scriptless:不能是JSP页面元素
tagdependent:由标签处理器去处理.jsp引擎不处理标签体,
给自定义标签定义属性:
先在java文件中定义属性和set方法.
然后在tld文件中加入:
<attribute>
<description>description</description>:对属性进行描述
<name>attributename</name>:为属性定义一个名称,不能以jsp,_jsp,java和sun开头.
<required>true</required>:true表示此属性是必需的,false表示可有可无.
<rtexprvalue>true</rtexprvalue>: true表示可以使用jsp表达式赋值.
<type>ObjectType</type>:指定此属性的java类型.
</attribute>
使用动态属性:在tld里面没写有哪些属性.利用集合来实现.
使用<dynamic-attributes>属性
让标签处理器实现javax.servlet.jsp.tagext.DynamicAttirbutes接口
public void setDynamicAttribute(String uri,String localName,Object value){}
值得注意的是: pageContext.getOut()返回的Out对象不是不变的.什么都不干的时候返回的是jsp中的out对象.如果返回doStartTag()方法返回EVAL_BODY_BUFFERED,将调用pushBody()方法后把原来的out对象压到栈顶,同时产生一个新的out对象.
popBody()方法可以将新的对象弹出,调用pageContext.getOut()方法就返回原来的out对象.
BodyContent是JspWriter的子类,bodyContent是一个out对象.bodyContent.getEnclosingWriter()返回的是类型JspWriter的out对象,即jsp页面的out对象.
简单标签库开发:
SimpleTag接口可以完成Tag接口的所有功能.它定义了如下几个方法:
setJspContext(JspContext pc):这个JspContext可以看作是PageContext.
setParent(JspTag parent):有父标签才被调用.
setJspBody(JspFragment jspBody): 如果标签有内容先调用setJspBody()方法.JspFragment就是一个标签体对象,但是不能包含脚本片段和脚本表达式.
doTag():可以处理上述接口中所说的三个方法的所有功能. 如果不想输出标签体,则在doTag()里面什么都不干,如果想循环则for或者while等,如果想改写标签体的内容也在此方法里面改写.要处理标签体内容就调用JspFragment的invoke()方法.如果不想让结束标签后面的jsp代码继续执行就抛出异常.如果JspFragment的invoke()方法的参数为null,就是把JspBody输出到jsp页面
在简单标签中定义属性:
<it315:mytag fragment="aaaaaaaa">
</it315:mytag>
等同于
<it315:mytag>
<jsp:attribute name="fragment">aaaaaaaa</jsp:attribute>
</it315:mytag>
使用下面这种方法时,要注意:如果标签有标签体,不能随便写了,应该这样:
<jsp:body>
这里写你的标签体
</jsp:body>
标签库的描述和部署:
jsp1.2:tld文件用的是dtd文件
jsp2.0:用的是xsd文件.
1. 可以<%@ taglib="" prefix=""%>
2. 在web.xml文件中
<web-app>
<jsp-config>
<taglib>
<taglib-uri>
给标签库文件指定一个URI,任何有意义的名字都可以,
但是通常以”http://”打头
</taglib-uri>
<taglib-location>标签库文件的位置</taglib-location>
</taglib>
</jsp-config>
</web-app>
3.也可以把标签文件打成jar包放在web应用程序的lib目录下.
自定义标签的功能先介绍到这里,在下面的blog中再加上几个小例子.
发表评论
-
发布一个支持N级下拉列表联动的控件
2010-10-29 14:38 1347最近,由于工作的需要,写了一个联动下拉列表控件,理论上支持N级 ... -
Tomcat内存溢出的三种情况及解决办法分析
2010-08-23 16:30 806Tomcat内存溢出的原因 在生产环境中to ... -
web.xml元素介绍
2010-08-23 16:27 906每一个站的WEB-INF下都有一个web.xml的设定文件,它 ... -
什么是交互设计(Interaction Design)?
2009-02-11 09:16 1370什么是交互设计(Interaction Design)? ... -
Alan Cooper 的交互设计观(转载)
2009-02-11 09:23 944Alan Cooper 的交互设计观 ... -
界面设计规则和规范
2009-02-11 09:38 857界面设计规则和规范 ... -
UI设计流程
2009-02-11 09:41 726UI设计流程 ... -
用户界面设计的技巧与技术
2009-02-11 09:43 680用户 ... -
UI设计,仅是画张图吗?
2009-02-11 09:44 1089UI设计,仅是画张图吗? ... -
软件界面设计要素
2009-02-11 09:51 776软件界面设计要素 界 ... -
GUI设计禁忌书摘
2009-02-13 10:47 790同一页面包含重复功能的链接或按钮。 将复选框用作单选按钮。 ... -
Tomcat配置和Web应用程序开发
2006-10-05 13:47 830◆tomcat是一个专门用 ... -
HTTP协议精解
2006-10-08 18:46 908WEB服务器和浏览器之间 ... -
Servlet开发基础
2006-10-08 20:48 8561.澄清动态网页和动态HTML网页的区别:动态网页:web服务 ... -
使用Servlet实现动态文件下载
2006-10-12 22:16 2127实现动态文件内容的下载:1.Servlet必须告诉浏览器其所输 ... -
URL编码
2006-10-21 23:24 942什么是URL编码? 当浏览 ... -
JSP简介
2006-10-21 23:26 777JSP是Java Server Page的缩写,通常JSP页 ... -
MVC模式
2006-10-22 07:53 963MVC模式 所谓的MVC模式就是模型-视图-控制器(Model ... -
Session详解
2006-11-01 14:27 585session,中文经常翻译为会话,其本来的含义是指有始有终的 ... -
Tomcat5中文问题解决之道
2006-11-01 14:38 593在tomcat5中发现了以前处理tomcat4的方法不能适 ...
相关推荐
二、自定义标签简介 2.1 自定义标签概念 自定义标签是JSP的一种扩展,它允许开发者定义自己的标签库,实现特定的功能,这些标签可以在多个JSP页面中重复使用,提高代码复用率。 2.2 标签相关概念 自定义标签通常由...
**一、JSP自定义标签简介** JSP自定义标签是JSP技术的一部分,它允许开发者通过XML语法创建自己的标签库,这些标签可以封装复杂的Java代码,使JSP页面更专注于展示逻辑而非业务逻辑。自定义标签与JSP标准标签库...
#### 二、JSP自定义标签简介 JSP自定义标签本质上是一段封装好的代码,可以被多次重复利用。通过定义自定义标签,开发者可以将复杂的逻辑封装起来,简化JSP页面的编写。自定义标签通常包括两个部分:标签库(Tag ...
**JSP自定义标签简介** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现页面的动态生成。在JSP中,除了内置的Java标签(如, 等)和标准标签库(如JSTL)之外,还...
介绍自定义标签的运行原理以及标签可以干哪些事情,简介传统标签与自定义标签的区别
在JSP中,自定义标签(Custom Tags)是将复杂的Java代码封装为可重用的XML元素,以提高代码的可读性和可维护性。自定义标签的使用使得JSP页面更简洁,同时也支持多语言版本的实现。 一、基本概念: 1. 标签(Tag):...
### 一、Struts自定义标签简介 #### 1.1 Struts自定义标签的作用 在Web应用开发中,经常需要在JSP页面中重复使用某些功能或逻辑,例如显示一个分页导航条、显示一个表格等等。为了解决代码重复的问题,提高代码复用...
#### 二、标准JSP标签简介 在JSP中,有一些标准标签(如 `<c:if>`、`<c:forEach>` 等)用于执行基本的控制结构和数据操作。但当遇到更为复杂的业务逻辑时,这些标准标签往往显得力不从心。这时,自定义标签的优势就...
### Taglib自定义标签库详解 #### 一、Taglib简介与作用 Taglib,即Tag Library(标签库),是JavaServer Pages (JSP) 技术中的一个重要组成部分,允许开发者创建可重用的定制标签,这些标签可以封装复杂的业务...
本文将深入探讨自定义JSP标签的相关概念、格式、处理过程以及创建和使用自定义标签库的步骤。 **一、基本概念** 1. **标签 (Tag)**:标签是XML元素,它使得JSP页面更加整洁,便于维护。标签名称和属性遵循大小写...
资源名称:扩展HTMLParser对自定义标签的处理能力内容简介: HTMLParser是一个用来解析HTML文档的开放源码项目,它具有小巧、快速、使用简单的特点以及拥有强大的功能。 现在该项目的最新版本是Integration Build ...
### JSP中的自定义标签详解 #### 一、基本概念 1. **标签(Tag)**:在JSP中,标签是一种类似于XML元素的结构,通过标签可以让JSP页面更清晰地组织代码,实现相同功能的不同部分在标签内的复用。标签在JSP中既可以...
在C#编程中,自定义控件是提升应用功能和用户体验的重要手段。当标准的C#控件无法满足特定业务需求时,开发者可以通过创建复合控件、扩展控件或自定义控件来实现定制化功能。以下是这三种控件类型的详细说明: 1. ...
【JSP标签简介】 JSP(JavaServer Pages)是一种基于Java技术的动态网页开发标准,它允许开发者在HTML代码中嵌入Java代码,以便在服务器端处理数据并生成动态网页内容。为了降低JSP开发的复杂性和维护成本,JSP引入...
自定义标签遵循 `<Prefix:TagFileName>` 格式,使用`<%@ taglib>`导入,并通过标签库描述符(TLD)文件定义。 11. **JSP标准标签库(JSTL)**:JSTL提供了一组标准标签,包括使用EL和不使用EL的两组,便于实现常见...
##### 2.1 自定义标签简介 - **标签库**:是一系列可以协同工作的标签集合,它们通常是由第三方开发者创建并发布的。 - **标签类**:实现了具体功能的Java类,这些类需要继承自`javax.servlet.jsp.tagext.SimpleTag...
总之,基于TextMeshPro的自定义富文本标签插件Custom Rich Text Tag Plugin为Unity开发者提供了强大的文本控制能力,通过自定义标签可以实现更多创新的文本效果。开发者应当熟练掌握其使用,以便在项目中充分利用这...
1. **FastReport简介** FastReport提供了一套完整的报表设计环境,用户可以在设计时预览报表,调整布局,并通过丰富的内置组件实现复杂的数据展现。其支持多种数据源,包括数据库、XML、CSV等,可以生成PDF、HTML、...