自定义jsp标签
Posted omji0030
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义jsp标签相关的知识,希望对你有一定的参考价值。
1、标签库的运作离不开tld文件
2、标签库的标签是定义在tld中的tag标签内(助手类)
标签的语言特点
<开始标签 属性="属性值">标签体</结束标签>
3. 自定义标签的开发及使用步骤
3.1 创建一个标签助手类(继承BodyTagSupport)
标签属性必须助手类的属性对应、且要提供对应get/set方法
3.2 创建标签库描述文件(tld),添加自定义标签的配置
注:tld文件必须保存到WEB-INF目录或其子目录
3.3 在JSP通过taglib指令导入标签库,并通过指定后缀
访问自定义标签
4.标签生命周期
SKIP_BODY:跳过主体
EVAL_BODY_INCLUDE:计算标签主体内容并[输出]
EVAL_BODY_BUFFERED:计算标签主体内容并[缓存]
EVAL_PAGE:计算页面的后续部分
SKIP_PAGE:跳过页面的后续部分
EVAL_BODY_AGAIN:再计算主体一次
作业:
foreach标签的助手类:
package com.tag; import java.util.List; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; public class ForeachTag extends BodyTagSupport /** * */ private static final long serialVersionUID = -961767522031795797L; private List<Object> itmes; private String var; public ForeachTag(List<Object> itmes, String var) super(); this.itmes = itmes; this.var = var; public ForeachTag() super(); // TODO Auto-generated constructor stub public List<Object> getItmes() return itmes; public void setItmes(List<Object> itmes) this.itmes = itmes; public String getVar() return var; public void setVar(String var) this.var = var; @Override public int doStartTag() throws JspException // TODO Auto-generated method stub if (itmes==null) return SKIP_BODY; return EVAL_BODY_INCLUDE;
if标签的助手类:
package com.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; public class IfTag extends BodyTagSupport /** * */ private static final long serialVersionUID = -5147827787787703458L; private boolean test; public boolean isTest() return test; public void setTest(boolean test) this.test = test; @Override public int doStartTag() throws JspException if (!test) return SKIP_BODY;//不显示标签中间的内容 return EVAL_BODY_INCLUDE;//显示标签中的内容
out标签的助手类:
package com.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; public class OutTag extends BodyTagSupport /** * */ private static final long serialVersionUID = -2971786012488394710L; private Object value; public Object getValue() return value; public void setValue(Object value) this.value = value; @Override public int doStartTag() throws JspException JspWriter out = pageContext.getOut(); try out.write(value.toString()); catch (Exception e) // TODO Auto-generated catch block throw new RuntimeException(e); return SKIP_BODY;
set标签的助手类:
package com.tag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyTagSupport; public class SetTag extends BodyTagSupport /** * set标签 */ private static final long serialVersionUID = -5972588683307720977L; private Object value; public Object getValue() return value; public SetTag(Object value) super(); this.value = value; public void setValue(java.lang.Object value) this.value=value; public void setTarget(java.lang.Object target) this.value=target; @Override public int doStartTag() throws JspException JspWriter out = pageContext.getOut(); try out.write(value.toString()); catch (Exception e) // TODO Auto-generated catch block throw new RuntimeException(); return SKIP_BODY;
自定义标签库:
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescrtiptor"> <tlib-version>1.1</tlib-version> <jsp-version>1.2</jsp-version> <short-name>Simple Tags</short-name> <uri>/lingerqi</uri> <tag> <name>out</name> <tag-class>com.tag.OutTag</tag-class> <body-content>JSP</body-content> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>Foreach</name> <tag-class>com.tag.ForeachTag</tag-class> <body-content>JSP</body-content> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>if</name> <tag-class>com.tag.IfTag</tag-class> <body-content>JSP</body-content> <attribute> <name>var</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> <tag> <name>set</name> <tag-class>com.tag.SetTag</tag-class> <body-content>JSP</body-content> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
调用标签:
<%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="z" uri="/lingerqi" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <%-- <% List<String> ls = new ArrayList<>(); ls.add("zc"); ls.add("ls"); ls.add("ww"); ls.add("zl"); ls.add("so"); ls.add("wl"); pageContext.setAttribute("ls", ls); %> <ol> <l:foreach var="l" itmes="$ls "> <li>$ls</li> </l:foreach> </ol> --%> <%-- <z:out></z:out> --%> <%-- <z:if>1>1</z:if> --%> </body> </html>
以上是关于自定义jsp标签的主要内容,如果未能解决你的问题,请参考以下文章