1、z标签
ui:将数据输出到界面上。
例如:
z:out
1、首先实例化一个out标签助手类,继承BodyTagSupport,根据自定义标签的特点先去分析out标签的属性,
是否有标签体、是否非空、是否必填......
就像下面的代码这样:
package com.zking.mvc.tag;
import java.io.IOException;
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 = 1L;
//out标签没有标签体
private Object value ;//非空 必填
private String defaultValue;
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
//调用doStartTag()方法
@Override
public int doStartTag() throws JspException {
// page request session application
try {
JspWriter out=this.pageContext.getOut();//内置的out方法
if(null!=this.value) {//如果value值不为空
out.println(this.value);//就输出value值
}
else if(null!=this.defaultValue) {//如果默认值不为空
out.println(this.defaultValue);//就输出默认值
}
else{
out.println();//这里不会显示信息
}
return SKIP_BODY;
}catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
}
2、然后写一个z.tld去配置所写的out标签
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>Simple Tags</short-name>
<!--标签地址:一般通常放公司的域名+项目名 -->
<uri>/zking</uri>
<!--标签 -->
<tag>
<!-- 标签名 -->
<name>out</name>
<!-- 标签助手类 -->
<tag-class>com.zking.mvc.tag.OutTag</tag-class>
<!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
<body-content>empty</body-content>
<!--标签属性 -->
<attribute>
<!--属性名称 -->
<name>value</name>
<!--属性是否必填 -->
<required>true</required>
<!--属性能否接收一个表达式作为值-->
<rtexprvalue>true</rtexprvalue>
<!--属性的描述 可写可不写 -->
<description></description>
</attribute>
<attribute>
<name>defaultValue</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
3、然后再写一个index.jsp(或者jsp页面)去验证你所写的内容:
<%@taglib prefix="z" uri="/zking"%>
<!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>
<%
request.setAttribute("userName1", "李易峰");
%>
<h1>JSP自定义标签的生命周期<%=System.currentTimeMillis()%></h1>
<z:test>${23+44}</z:test>
<br/>
${10+10}
<h2>LYF!!!</h2>
<ul>
<li>
<h2>z:out</h2>
<div>
<z:out value="${userName}" defaultValue=""></z:out>
</div>
</li>
<li>
</ul>
</body>
</html>
然后运行结果:
补充知识点:page、session、request、application几个内置对象的作用域:
page作用于当前页面
session作用于当前会话
request作用于当前请求
application作用于当前应用
控制:通过标签整体信息进行展示,但是不需要显示在界面上
例如:
z:if z:forEach
数据:
z:dictList
1、首先写一个DictListTag的标签助手类,并继承BodyTagSupport,如下图所示:
public class DictListTag extends BodyTagSupport{
private static final long serialVersionUID =-8411305497745885433L;
private String var;//保存数据到page作用域 非空
private DeptDAO deptdao=new DeptDAO();
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
public DeptDAO getDeptdao() {
return deptdao;
}
public void setDeptdao(DeptDAO deptdao) {
this.deptdao = deptdao;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
//开始标签
@Override
public int doStartTag() throws JspException {
List ls=deptdao.list();
this.pageContext.setAttribute(this.var, ls);
return SKIP_BODY;//跳过标签主体
}
}
2、相关的配置文件 其实就是你的后缀名为.tld的文件!
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version><!--标签库要求的jsp规范版本 -->
<jsp-version>1.2</jsp-version>
<short-name>Simple Tags</short-name>
<!--标签地址:一般通常放公司的域名+项目名 -->
<uri>/zking</uri>
<tag>
<!-- 标签名 -->
<name>dictList</name>
<!-- 标签助手类 -->
<tag-class>com.zking.mvc.tag.DictListTag</tag-class>
<!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 -->
<body-content>empty</body-content>
<!-- 标签属性 -->
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
3、验证的页面代码:
实体类:
dao方法:
jsp页面:
<ul>
<li>
<h2>z:dictList</h2>
<div>
<z:dictList var="dislist"/>
${dislist}
</div>
</li>
</ul>
4、最后运行的结果:
z:select 下拉框标签
1、首先写一个SelectTag的标签助手类,并继承BodyTagSupport,就像下面展示的代码这样:
根据select下拉框的属性,定义好该定义的属性,以及写好set/get方法。
public class SelectTag extends BodyTagSupport{
private static final long serialVersionUID = 1L;
private String name;//非空 不支持表达式
private String id;//允许空
private String cssStyle;//允许空
private String cssClass;//允许空
private String onchange;//允许空
private List items;//数据源
private String valueProperty;//不允许为空 <option value='valueProperty'>
private String textProperty;//不允许为空 <option>textProperty</option>
private String headValue;//允许空 用来生成第一项内容
private String headText;//允许空 用来生成第一项内容
private String selectedValue;//选中 允许空值
public String getSelectedValue() {
return selectedValue;
}
public void setSelectedValue(String selectedValue) {
this.selectedValue = selectedValue;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCssStyle() {
return cssStyle;
}
public void setCssStyle(String cssStyle) {
this.cssStyle = cssStyle;
}
public String getCssClass() {
return cssClass;
}
public void setCssClass(String cssClass) {
this.cssClass = cssClass;
}
public String getOnchange() {
return onchange;
}
public void setOnchange(String onchange) {
this.onchange = onchange;
}
public List getItems() {
return items;
}
public void setItems(List items) {
this.items = items;
}
public String getValueProperty() {
return valueProperty;
}
public void setValueProperty(String valueProperty) {
this.valueProperty = valueProperty;
}
public String getTextProperty() {
return textProperty;
}
public void setTextProperty(String textProperty) {
this.textProperty = textProperty;
}
public String getHeadValue() {
return headValue;
}
public void setHeadValue(String headValue) {
this.headValue = headValue;
}
public String getHeadText() {
return headText;
}
public void setHeadText(String headText) {
this.headText = headText;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
//开始标签
@Override
public int doStartTag() throws JspException {
try {
//获取out
JspWriter out=this.pageContext.getOut();
out.println(toHtml());
return SKIP_BODY;
}catch (Exception e) {
// TODO: handle exception
throw new RuntimeException(e);
}
}
//拼接select
public String toHtml() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
StringBuffer sb=new StringBuffer();
sb.append("<select");
sb.append(" name='"+this.name+"'");
if(null!=this.id && "".equals(this.id)) {
sb.append(" id='"+this.id+"'");
}
if(null!=this.cssStyle && "".equals(cssStyle)) {
sb.append(" Style='"+cssStyle+"'");
}
if(null!=this.cssClass && "".equals(this.cssClass)) {
sb.append(" Class='"+this.cssClass+"'");
}
if(null!=this.onchange && "".equals(this.onchange)) {
sb.append(" onchange='"+this.onchange+"'");
}
sb.append(">");
if(null!=this.headText) {
sb.append("<option value='"+this.headValue+"'> "+headText+"</option>");
}
//开始拼接option
for(int i=0;null!=items && i<items.size();i++) {
Object item=items.get(i);
//如果第一项填写了值 就使用默认值
Object value=PropertyUtils.getProperty(item, this.valueProperty);
Object text=PropertyUtils.getProperty(item, this.textProperty);
if(null!=this.selectedValue) {
this.selectedValue.equals(value);
sb.append("<option selected value='"+value+"'> "+text+"</option>");
}else {
sb.append("<option value='"+value+"'> "+text+"</option>");
}
}
sb.append("</select>");
return sb.toString();
}
}
2、相关配置文件(z.tld)
在配置文件的时候,写tag标签的时候,标签的地址 也就是Uri我们一般放 公司的域名+项目名
然后再写好相关的标签名称、设置值的时候根据情况而定,比如哪些必填,哪些是否支持表达式......
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version><!--标签库要求的jsp规范版本 -->
<jsp-version>1.2</jsp-version>
<short-name>Simple Tags</short-name>
<!--标签地址:一般通常放公司的域名+项目名 -->
<uri>/zking</uri>
<!-- 自定义下拉框标签 -->
<tag>
<name>Select</name>
<tag-class>com.zking.mvc.tag.SelectTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>id</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>cssStyle</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>cssClass</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>onchange</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>valueProperty</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>textProperty</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>headValue</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>headText</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>selectedValue</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3、用来进行验证的代码:
这里我用的集合名字都是上面已经写好了的,所以就直接拿过来使用了!!
<%@page import="com.zking.mvc.entity.Student"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.mvc.dao.DeptDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="/zking"%>
<!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>
<ul>
<li>
<h2>z:select</h2>
<div>
<z:Select headText="---请选择---" items="${dislist}" name="deptId" valueProperty="deptId" textProperty="deptName" cssStyle="width:200px;"/>
</div>
<div>
<z:Select selectedValue="${deptId}" headText="---请选择---" items="${dislist}" name="deptId" valueProperty="deptId" textProperty="deptName" cssStyle="width:200px;"/>
</div>
</li>
</ul>
</body>
</html>
4、运行结果:
Z:Radio 单选框标签
1、先写好一个RadioTag的标签助手类,并继承BodyTagSupport,根据需要的属性,定义好属性,写好对应的set/get方法........
public class RadioTag extends BodyTagSupport{
private static final long serialVersionUID = -7069758898902811916L;
private String name;//允许空 不支持表达式
private String value;//非空 不支持表达式
private String checked;//允许空 不支持表达式
private String text;//非空 不支持表达式
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getChecked() {
return checked;
}
public void setChecked(String checked) {
this.checked = checked;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
//开始标签
@Override
public int doStartTag() throws JspException {
try {
JspWriter out=this.pageContext.getOut();
out.println(toHtml());
return SKIP_BODY;
}catch (Exception e) {
throw new RuntimeException(e);
}
}
//拼接Radio
public String toHtml() {
StringBuffer sb=new StringBuffer();
sb.append( "<input type='radio'");
if(null!=this.name) {
sb.append(" name= '"+this.name+"'");
}
sb.append(" value='"+this.value+"'");
if(null!=this.checked) {
if(this.checked.equals(this.value)) {
sb.append( "checked='checked'");
}
}
sb.append("/>");
sb.append(this.text);
return sb.toString();
}
2、相关配置文件(z.tld)
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version><!--标签库要求的jsp规范版本 -->
<jsp-version>1.2</jsp-version>
<short-name>Simple Tags</short-name>
<!--标签地址:一般通常放公司的域名+项目名 -->
<uri>/zking</uri>
<!--radio标签 -->
<tag>
<name>radio</name>
<tag-class>com.zking.mvc.tag.RadioTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>checked</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>text</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
3、验证代码:
<%@page import="com.zking.mvc.entity.Student"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.mvc.dao.DeptDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="/zking"%>
<!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>
<li>
<h2>z:radio</h2>
<z:radio value="男" text="男"/>
<z:radio value="女" text="女" checked="女"/>
</li>
</ul>
</body>
</html>
4、运行结果:
Z:CheckBox 复选框标签
1、先写一个CheckBoxTag的标签助手类,并继承BodyTagSupport.....
public class CheckBoxTag extends BodyTagSupport{
private static final long serialVersionUID = 2872470383710736929L;
private String value;//非空 不支持表达式
private String checked;//允许空 不支持表达式
private String text;//非空 不支持表达式
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getChecked() {
return checked;
}
public void setChecked(String checked) {
this.checked = checked;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
//开始标签
@Override
public int doStartTag() throws JspException {
try {
JspWriter out=this.pageContext.getOut();
out.println(toHtml());
}catch (Exception e) {
// TODO: handle exception
throw new RuntimeException(e);
}
return super.doStartTag();
}
//开始拼接checkbox
public String toHtml() {
StringBuffer sb=new StringBuffer();
sb.append("<input type='checkbox' ");
sb.append(" value='"+this.value+"' ");
if(null!=this.checked) {
if(this.checked.equals(this.value)) {
sb.append(" checked='checked'");
}
}
sb.append("/>");
sb.append(this.text);
return sb.toString();
}
}
2、相关配置文件(z.tld)
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
<tlib-version>1.0</tlib-version><!--标签库要求的jsp规范版本 -->
<jsp-version>1.2</jsp-version>
<short-name>Simple Tags</short-name>
<!--标签地址:一般通常放公司的域名+项目名 -->
<uri>/zking</uri>
<!--checkbox标签 -->
<tag>
<name>checkbox</name>
<tag-class>com.zking.mvc.tag.CheckBoxTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>checked</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>text</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
3、验证代码:
<%@page import="com.zking.mvc.entity.Student"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.mvc.dao.DeptDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="/zking"%>
<!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>
<h2>z:checkbox</h2>
<z:checkbox value="敲代码" text='敲代码' checked='敲代码' />
<z:checkbox value="听音乐" text='听音乐' checked='听音乐' />
<z:checkbox value="刷抖音" text='刷抖音' />
</li>
</ul>
</body>
</html>
4、运行结果:
好了,基本上常用的标签的用法就总结到这了,接下来我们来看一下标签有哪些内容类型吧!!
2、标签的内容类型:
empty表示空标签 jsp可以表示为任何合法的元素
然后是标签的属性啦!!!
3、标签属性:
1、一般使用<atttribute></attribute>标签来设置标签属性
2、<name></name>表示标签名称
3、<required></required>表示标签属性是否必填 true表示必填 false表示不一定要填
4、<rtexprvalue></rtexprvalue>表示是否可接收表达式为值 true表示可接收 false则相反
5、<description></description>表示属性描述 可写可不写的 一般放在标签属性的最后面
JSP自定义标签的知识点就讲到这里了,有什么更好的想法或者建议欢迎评论或者私信交流噢!!!