自定义标签的使用
注:prjtag工程
(1)普通自定义标签
a:JSP页面:
<%@ taglib prefix="p" uri="http://wwww.phome.mytaglib" %>
Body标签体中
<p:hello str1="tom"/> 这两个uri保持一致
b:自定义标签文件
WEB-INT/tlds这个目录下定义mytag.tld文件,类似于jstl的c.tld文件,拷贝前十二行到mytag.tld文件中
………………
<uri>http://wwww.phome.mytaglib</uri>
<tag>
<name>hello</name><!-- 自定义标签的名字,类似于core下的if标签-->
<tag-class>com.phome.test1.MyTag</tag-class><!-- 自定义标签对应src下的具体类-->
<body-content>empty</body-content><!-- 自定义标签体的格式,empty表示没有 标签体-->
<attribute>
<name>str1</name><!-- 自定义标签属性名称-->
<required>true</required><!-- 属性是否是必须的-->
<rtexprvalue>true</rtexprvalue><!-- 是否允许EL表达式-->
<type>java.lang.String</type>
</attribute>
</tag> 标签处理类
c:支持的类,src目录下建立bao
//支持自定义标签的类
public class MyTag extends SimpleTagSupport {
private String str1 ;
public String getStr1() {return str1;}
public void setStr1(String str1) {this.str1 = str1;}
public void doTag() throws JspException, IOException {
//获得out对象引用
JspWriter out = this.getJspContext().getOut();
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
out.println(str1);
out.println(sdf.format(now));
}
}
(2)标签文件1,没有标签体
a:JSP页面:tfile.jsp
<%@ taglib prefix="h" tagdir="/WEB-INF/tags" %>
Body标签体中
<h:hello></h:hello>
b:自定义标签文件
WEB-INT/tags这个目录下定义hello.tag文件
<%@ tag pageEncoding="utf-8" language="java" isELIgnored="false" import="java.util.Date" body-content="empty"%>
${"My Hello Tag File"}
(3)标签文件2,有标签体
a:JSP页面:tagva.jsp
<%@ taglib prefix="h" tagdir="/WEB-INF/tags" %>
Body标签体中
<h:hello></h:hello>
b:自定义标签文件
WEB-INT/tags这个目录下定义tagva.tag文件
<%@tag import="java.text.SimpleDateFormat"%><%@ tag pageEncoding="utf-8" body-content="scriptless" language="java" import="java.util.Date" isELIgnored="false"%>
<%@ attribute name="str1" required="true" rtexprvalue="true"%>
<%@ variable name-given="FullDate" scope="NESTED"%>
<%
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
String strNow = sdf.format(date);
this.getJspContext().setAttribute("FullDate",strNow);
%>
${str1}<jsp:doBody></jsp:doBody>
注:scope 的三个属性:
(1) NESTED在标签内事有效的
(2) AT_BEGIN,在标签之前是有效的
(3) AT_END在标签之后是有效的
注:标签文件的属性分为值属性和碎片属性:
碎片属性的测试
a:JSP页面:invoke.jsp
<%@ taglib prefix="i" tagdir="/WEB-INF/tags" %>
Body标签体中
<i:invoke>
<jsp:attribute name="myatt">fdfdfdfd</jsp:attribute>
</i:invoke>
</body>b:自定义标签文件
WEB-INT/tags这个目录下定义invoke.tag文件
<%@ tag language="java" pageEncoding="utf-8" body-content="scriptless" isELIgnored="false" import="java.util.Date"%>
<%@ attribute name="myatt" required="false" fragment="true" %><!-- fragment是否是粉碎的 碎片属性的作用是可以写jsp代码,jsp:invoke直接在页面调用-->
<jsp:invoke fragment="myatt"></jsp:invoke>
(4) 自定义标签的综合使用
将一个网页上相同的部分定义到标签文件中register.jsp/login.jsp、、
标签文件tagss.tag
<%@ tag pageEncoding="utf-8" language="java" isELIgnored="false" body-content="scriptless"%>
…….t头部
<jsp:doBody></jsp:doBody>
……..尾部
Jsp页面
<%@ taglib prefix="p" tagdir="/WEB-INF/tags" %>
<p:tagss>
网站主体
</p:tagss>