1. 程式人生 > >JSP Fragment類 (標籤體) EL

JSP Fragment類 (標籤體) EL

仿寫ForEach
package tag1;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class chooseTag extends SimpleTagSupport{
    private  boolean  flag=true;
    public void setFlag(boolean flag) {
		this.flag = flag;
	}
	public boolean isFlag() {
		return flag;
	}
	@Override
	public void doTag() throws JspException, IOException {
    getJspBody().invoke(null);
	}
//	//模仿  if else 該屬性不寫在mytag.tld中
//	private  boolean  flag1=true;
//	//子類呼叫  設定falg1的布林值 
//	public void setFlag1(boolean flag1) {
//		this.flag1 = flag1;
//	}
//	//子類呼叫  獲取 flag1的布林值 
//	public boolean isFlag1() {
//		return flag1;
//	}
}

package tag1;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import org.apache.taglibs.standard.tag.common.core.ChooseTag;
public class when extends SimpleTagSupport{
              private  boolean  test;
              public void setTest(boolean test) {
				this.test = test;}
            @Override
            public void doTag() throws JspException, IOException {
            //如果test為真 
            if(test){
        	  chooseTag  ct=(chooseTag) getParent();
              boolean  flag=ct.isFlag();
              if(flag){
            	  //同為true的時候輸出  
            	  getJspBody().invoke(null);
            	  //重置 
            	  ct.setFlag(false);
              }}
//            if(test1){
//            	chooseTag   ct=(chooseTag) getParent();
//            	boolean  flag1=ct.isFlag();
//            if(flag1){
//            	getJspBody().invoke(null);
//            	ct.setFlag(flag1);
//            }
//            }
            
            }          //JSP頁面中的判斷寫在此處 
            /*<lvqian:choose>
			         <lvqian:when test="${param.age > 24 }">大學畢業</lvqian:when>
			         <lvqian:when test="${param.age > 20 }">高中畢業</lvqian:when>
			         <lvqian:otherwise>高中以下。。</lvqian:otherwise>
     		</lvqian:choose>
//             * */
//           private  boolean test1;     
//          public void setTest1(boolean test1) {
//			this.test1 = test1;
//		}

}
package tag1;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class otherwise extends SimpleTagSupport{
    @Override
    public void doTag() throws JspException, IOException {
    	//獲取父類物件 
    chooseTag   ct=(chooseTag) getParent();
//        boolean  Flag=ct.isFlag();
//    if(Flag){
//    	getJspBody().invoke(null);
//    }
    //獲取父類的  布林值 
    if(ct.isFlag()){
    	getJspBody().invoke(null);
    }
    }
}
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="tag1.Customer"%>
<%@page import="java.util.List"%>
<%@ 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://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@taglib  prefix="lvqian"  uri="tag1.HelloSimpleTag_rt"%>
<!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>
  <!-- 父標籤列印name到控制檯 -->
  <lvqian:parent>
        <!-- 字標籤以父標籤的標籤體存在  字標籤把父標籤的name屬性列印到控制檯上 -->
      <lvqian:son/>
  </lvqian:parent>
   <lvqian:getJspFragment>nihaoa</lvqian:getJspFragment>
   <lvqian:time time= "10" >abcdefg</lvqian:time>
     <%
        //模擬Servlet中的操作
       List<Customer> customers=new  ArrayList<Customer>();
     customers.add(new Customer("AA",1));
     customers.add(new Customer("BB",2));
     customers.add(new Customer("CC",3));
     customers.add(new Customer("DD",4));
     customers.add(new Customer("FF",5));
     request.setAttribute("customers", customers);
     %>
     <%
     Map<String,Customer> cm=new HashMap<String,Customer>();
     cm.put("a",cm.get(0));
     cm.put("a",cm.get(1));
     cm.put("a",cm.get(2));
     cm.put("a",cm.get(3));
     cm.put("a",cm.get(4));
     request.setAttribute("cm", cm);
     %>
    <%-- 
     <lvqian:foreach tiems="${requestScope.cm }" var="cmp">
   -->${pageScope.cmp.key }--${cmp.value.name }-->${cmp.value.age }
     
     </lvqian:foreach>
    <c:forEach items="${requestScope.customers }" var="customer">
		--${customer.name }, ${customer.age }<br>
	</c:forEach>
    --%> 
     <lvqian:foreach tiems="${requestScope.customers }" var="cust">
     --${pageScope.cust.name } --${cust.age }<br>
     
     </lvqian:foreach>
     <lvqian:choose>
         <lvqian:when test="${param.age > 24 }">大學畢業</lvqian:when>
         <lvqian:when test="${param.age > 20 }">高中畢業</lvqian:when>
         <lvqian:otherwise>高中以下。。</lvqian:otherwise>
     </lvqian:choose>
      ${lvqian:concat(param.name1,param.name2)}  EL表示式  
      
      
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<taglib 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"
	version="2.0">
	<description>mytag 1.0 core library</description>
	<display-name>mytag core</display-name>
	<tlib-version>1.0</tlib-version>
	<!-- 建議在jsp頁面上使用的標籤字首 -->
	<short-name>lvqian</short-name>
	<!-- 作為tid檔案的id 用來唯一標示當前的TLD檔案 多個TLD檔案的URI不能重複 通過 JSP頁面的taglib標籤的uri屬性來引用 -->
	<uri>tag1.HelloSimpleTag_rt</uri>
	<!-- 自定義標籤 -->
  
	<tag>
	  <name>choose</name>
	  <tag-class>tag1.chooseTag</tag-class>
	  <body-content>scriptless</body-content>
	</tag>
	<tag>
	  <name>when</name>
	   <tag-class>tag1.when</tag-class>
	   <body-content>scriptless</body-content>
	   <attribute>
	     <name>test</name>
	     <required>true</required>
	      <rtexprvalue>true</rtexprvalue>
	   </attribute>
	</tag>
	<tag>
	  <name>otherwise</name>
	  <tag-class>tag1.otherwise</tag-class>
	  <body-content>scriptless</body-content>
	</tag>
	<tag>
		<name>parent</name>
		<tag-class>tag1.ParentTag</tag-class>
		<body-content>scriptless</body-content>	
	</tag>
	<tag>
		<name>son</name>
		<tag-class>tag1.sonTag</tag-class>
		<body-content>empty</body-content>
	</tag>
	<tag>
		<name>foreach</name>
		<tag-class>tag1.Foreach</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>tiems</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>var</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>

	</tag>
	<tag>
		<name>time</name>
		<tag-class>tag1.PrintUpperTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>time</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	<tag>
		<name>getJspFragment</name>
		<tag-class>tag1.testgetJspFragment</tag-class>
		<body-content>scriptless</body-content>
	</tag>
	<tag>
		<name>file</name>
		<tag-class>tag1.FileTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>src</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	<tag>
		<name>max</name>
		<tag-class>tag1.lainxi1</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>num1</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>num2</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	<tag>
		<!-- 標籤的名字 在JSP頁面上使用標籤時的名字 -->
		<name>hello</name>
		<!-- 標籤所在的全類名 -->
		<tag-class>tag1.HelloSimpleTag</tag-class>
		<!-- 標籤體 的型別 -->
		<body-content>empty</body-content>
		<!-- 描述當前標籤的屬性 -->
		<attribute>
			<!-- 屬性名字 -->
			<name>value</name>
			<!-- 該屬性是否被必須寫 -->
			<required>true</required>
			<!-- rtexprvalue:runtime expression value 當前屬性是否可以接受執行時表示式的動態值 -->
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<!-- 屬性名字 -->
			<name>count</name>
			<!-- 該屬性是否被必須寫 -->
			<required>true</required>
			<!-- rtexprvalue:runtime expression value 當前屬性是否可以接受執行時表示式的動態值 -->
			<rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
<!-- EL自定義表示式  -->	
  <function>
      <name>concat</name>
      <function-class>tag1.ELfunction</function-class>
      <!-- 指定java類中的靜態方法簽名      必須宣告方法的返回值型別及各個引數的型別 各個引數之間用逗號隔開  -->
      <function-signature>java.lang.String  show(java.lang.String, java.lang.String)</function-signature>
  </function>
  <function>
    <name>concat1</name>
    <function-class>全類名</function-class>
    <function-signature>型別   方法名(引數1,引數2)</function-signature>
  
  </function>
</taglib>