1. 程式人生 > >自定義EL的函式案例

自定義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/

web-jsptaglibrary_2_0.xsd">
 <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-class>
 <!-- 配置方法的簽名 -->
 <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);
}
}
}