自定義EL的函式案例
自定義EL的函式
自定義EL函式
1,* 編寫的方法必須是靜態方法
* 在tld檔案中進行配置
public class ElDemo1 {
public static String sayHello(String name){
return "hello "+name;
}
}
2,新建tld,選2.0版本,約束配置紅色
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://www.itcast.cn/1110/myfn1</uri>
<!-- 配置自定義的EL函式 -->
<function>
<!-- 配置方法名稱 -->
<name>sayHi</name>隱藏方法名sayHello
<!-- 方法所在的類 -->
<function-class>cn.itcast.el.ElDemo1
<!-- 配置方法的簽名 -->
<function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
</function>
</taglib>
3,JSP中引入標籤庫:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://www.itcast.cn/1110/myfn" prefix="myfn" %>
<!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>
${ fn:length("abcdefg") }
${ fn:toUpperCase("abcdefg") }
${ myfn:sayHi("小風") }
</body>
</html>
自定義標籤
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.itcast.cn/1110/myc" prefix="myc" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>
<myc:print/>
<myc:out>
小鳳
</myc:out>
<c:set var="i" value="10"></c:set>
<myc:if test="${ i eq 10 }">
美美
</myc:if>
</body>
</html>
/**
* 對外輸出Hello
* @author Administrator
*編寫一個類,繼承SimpleTagSupport。
* 選擇重寫的方法,doTag()必須有的。
*/
public class TagDemo1 extends SimpleTagSupport{
private PageContext pc;
public void doTag() throws JspException, IOException {
pc.getOut().write("Hello");
}
/**
* 伺服器預設先執行該方法
*/
public void setJspContext(JspContext pc) {
this.pc = (PageContext) pc;
}
}
配置tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>myc</short-name>
<uri>http://www.itcast.cn/1110/myc</uri>
<!-- 配置自定義標籤 -->
<tag>
<!-- 配置標籤名稱 -->
<name>print</name>對外名稱
<!-- 配置標籤的類 -->
<tag-class>cn.itcast.tag.TagDemo1</tag-class>類全路徑
<!-- 配置標籤主體 -->
<body-content>empty</body-content>
</tag>
<!-- 配置自定義標籤 -->
<tag>
<!-- 配置標籤名稱 -->
<name>out</name>
<!-- 配置標籤的類 -->
<tag-class>cn.itcast.tag.TagDemo2</tag-class>
<!-- 配置標籤主體 -->
<body-content>scriptless</body-content>
</tag>
<!-- 配置自定義標籤 -->
<tag>
<!-- 配置標籤名稱 -->
<name>if</name>
<!-- 配置標籤的類 -->
<tag-class>cn.itcast.tag.TagDemo3</tag-class>
<!-- 配置標籤主體 -->
<body-content>scriptless</body-content>
<!-- 配置屬性 -->
<attribute>
<!-- 配置屬性名稱 -->
<name>test</name>
<!-- 屬性是否是必須的 -->
<required>true</required>
<!-- 是否支援EL表示式 -->
<rtexprvalue>true</rtexprvalue>
<!-- 屬性的型別 -->
<type>boolean</type>
</attribute>
</tag>
</taglib>
/**
* 帶有標籤主體
* @author Administrator
* 編寫類,繼承SimpleTagSupport。
* 重寫doTag()
* 獲取標籤主體物件
JspFragment jf = getJspBody();
jf.invoke(null);
*/
public class TagDemo2 extends SimpleTagSupport{
private PageContext pc;
public void doTag() throws JspException, IOException {
JspFragment jf = getJspBody();標籤主體
jf.invoke(null);顯示到瀏覽器
}
public void setJspContext(JspContext pc) {
this.pc = (PageContext)pc;獲取輸出流
}
}
/**
* 類似<c:if>標籤,帶有屬性的
* @author Administrator
* 編寫類,繼承SimpleTagSupport。
* 重寫doTag()
* 編寫一個屬性,屬性必須和標籤中的屬性是相同
* 提供set方法
* 獲取標籤主體物件
JspFragment jf = getJspBody();
jf.invoke(null);
*/
public class TagDemo3 extends SimpleTagSupport{
private boolean test;
public void setTest(boolean test) {
this.test = test;
}
public void doTag() throws JspException, IOException {
if(test){
getJspBody().invoke(null);
}
}
}