JSP Fragment類 (標籤體) EL
阿新 • • 發佈:2018-12-11
仿寫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>