天天看點

深入體驗JavaWeg開發内幕——使用傳統自定義标簽的執行個體應用    1. 控制jsp頁面某一部分内容是否執行。2.控制整個jsp頁面是否執行。3.控制jsp頁面内容重複執行。  4. 修改jsp頁面内容輸出。

          關于傳統自定義标簽也就是繼承TagSupport類或者BodyTagSurpport類的标簽處理類,下面我們來看一看開發傳統标簽的執行個體吧!

                         1. 控制jsp頁面某一部分内容是否執行。                          

                          2.控制整個jsp頁面是否執行。                     

                        3.控制jsp頁面内容重複執行。                       

                       4. 修改jsp頁面内容輸出。    

          這是标簽庫描述檔案,以下不再過多贅述讀者可自己檢視。        

lijizh.tld

<?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>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>lijizh</short-name>
    <uri>http://www.hbsi.com</uri>
    <tag>
	<description>Outputs Hello, World</description>
        <name>lijizh</name>
	<tag-class>www.hbsi.web.tag.CustomTagIP</tag-class>
	<body-content>empty</body-content>
    </tag>
    
    <tag>
	<description>show1</description>
        <name>H</name>
	<tag-class>www.hbsi.web.tag.ShowInnerLableContent</tag-class>
	<body-content>JSP</body-content>
    </tag>
    <tag>
	<description>show2</description>
        <name>H1</name>
	<tag-class>www.hbsi.web.tag.ShowInnerLableContent1</tag-class>
	<body-content>JSP</body-content>
    </tag>
    
   <tag>
	<description>show3</description>
        <name>H2</name>
	<tag-class>www.hbsi.web.tag.ShowInnerLableContent2</tag-class>
	<body-content>JSP</body-content>
    </tag>
    
     
   <tag>
	<description>show4</description>
        <name>H3</name>
	<tag-class>www.hbsi.web.tag.ShowInnerLableContent3</tag-class>
	<body-content>JSP</body-content>
    </tag>
    
  </taglib>
  
           

    1. 控制jsp頁面某一部分内容是否執行。

       執行标簽體

ShowInnerLableContent.java


public class ShowInnerLableContent extends TagSupport {
@Overridepublic int doStartTag() throws JspException {
//此字段在doStartTag()中不适用,其作用是控制JSP頁面中部分内容是否執行,也就是說無法實作對整個頁面内容的限定return this.EVAL_BODY_INCLUDE;} }

show1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>
<html> 
</head> 
<body> 
<lijizh:H> SKIP_BODY This is my JSP page. <br> </lijizh:H> 
aaaaaaaa<br/> 
</body>
</html>
           

效果一

深入體驗JavaWeg開發内幕——使用傳統自定義标簽的執行個體應用    1. 控制jsp頁面某一部分内容是否執行。2.控制整個jsp頁面是否執行。3.控制jsp頁面内容重複執行。  4. 修改jsp頁面内容輸出。
//忽略标簽體

public class ShowInnerLableContent extends TagSupport {

@Override
	public int doStartTag() throws JspException {
		
	
		//	此字段在doStartTag()中不适用,其作用是控制JSP頁面中部分内容是否執行,也就是說無法實作對整個頁面内容的限定
		return this.SKIP_BODY;
	
	}
  
}

//其他檔案不做變化。
           
深入體驗JavaWeg開發内幕——使用傳統自定義标簽的執行個體應用    1. 控制jsp頁面某一部分内容是否執行。2.控制整個jsp頁面是否執行。3.控制jsp頁面内容重複執行。  4. 修改jsp頁面内容輸出。

2.控制整個jsp頁面是否執行。

//執行标簽體後的頁面内容

  

ShowInnerLableContent1.java


public class ShowInnerLableContent1 extends TagSupport {
@Overridepublic int doEndTag() throws JspException { 
// 該方法隻是對自定義标簽結束時調用,以判斷該标簽之後的内容是否顯示return this.EVAL_PAGE;}}


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>

<html>
  <head>
    <base href="<%=basePath%>" target="_blank" rel="external nofollow" >
    
    <title>My JSP 'show1.jsp' starting page</title>

  </head>
  
  <body>
    <lijizh:H1>
    SKIP_PAGE
    This is my JSP page. <br>
    </lijizh:H1>
    aaaaaaaa<br/>
  </body>
</html>

           
深入體驗JavaWeg開發内幕——使用傳統自定義标簽的執行個體應用    1. 控制jsp頁面某一部分内容是否執行。2.控制整個jsp頁面是否執行。3.控制jsp頁面内容重複執行。  4. 修改jsp頁面内容輸出。
//忽略标簽體後的頁面内容:

 

public class ShowInnerLableContent1 extends TagSupport {

@Override
	public int doEndTag() throws JspException {
	   	
// 該方法隻是對自定義标簽結束時調用,以判斷該标簽之後的内容是否顯示
		return this.SKIP_PAGE;

	}
}

           
深入體驗JavaWeg開發内幕——使用傳統自定義标簽的執行個體應用    1. 控制jsp頁面某一部分内容是否執行。2.控制整個jsp頁面是否執行。3.控制jsp頁面内容重複執行。  4. 修改jsp頁面内容輸出。

3.控制jsp頁面内容重複執行。

//重複執行

public class ShowInnerLableContent2 extends TagSupport {
    int i =0;
	@Override
	public int doStartTag() throws JspException {
		return this.EVAL_BODY_INCLUDE;
	}

	@Override
	public int doAfterBody() throws JspException {
		
//  由于在該方調用之前先調用doStartTag()方法,而doStartTag()方法的預設傳回值為SKIP_BODY;
//		是以應該重寫doStartTag()方法将其傳回值設定為EVAL_BODY_INCLUDE;另外還需要為自定義标簽
//		體定義屬性告知其顯示循環顯示次數或給doAfterBody()方法定義循環次數才可起作用否則該方法
//		不會去執行
		i++;
		if(i<=3){
			return this.EVAL_BODY_AGAIN;
		}else{
			return this.SKIP_BODY;
		}	
	}
}

           
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>

<html>
  <head>
  
    <title>My JSP 'show1.jsp' starting page</title>

  </head>
  
  <body>
    <lijizh:H2>
   show3EVAL_BODY_AGAIN<br/>
    This is my JSP page. <br>
  </lijizh:H2>
    aaaaaaaa<br/>
    bb<br/>
  </body>
</html>

           
深入體驗JavaWeg開發内幕——使用傳統自定義标簽的執行個體應用    1. 控制jsp頁面某一部分内容是否執行。2.控制整個jsp頁面是否執行。3.控制jsp頁面内容重複執行。  4. 修改jsp頁面内容輸出。

  4. 修改jsp頁面内容輸出。

将自定義标簽體中的内容轉成大寫後輸出

public class ShowInnerLableContent3 extends BodyTagSupport {

	@Override
	public int doEndTag() throws JspException {
//		此方法用于在繼承了BodyTagSupport 類的ShowInnerLableContent3中
//		用于修改自定義标簽中的内容,根據其傳回值可确定是否顯示标簽後面的
//		page内容
		BodyContent bc = this.getBodyContent();
		String content = bc.getString();
		String upperCase = content.toUpperCase();
		JspWriter out =  this.pageContext.getOut();
		try {
			out.print(upperCase);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		return this.EVAL_PAGE;
	}
    
	}
		
           
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com" prefix="lijizh" %>

<html>
  <head>
    
    <title>My JSP 'show1.jsp' starting page</title>
    
  </head>
  
  <body>
   show4toUppercase<br/>
    <lijizh:H3>
  
    touppercase! <br>
  </lijizh:H3>
   
  </body>
</html>

           
深入體驗JavaWeg開發内幕——使用傳統自定義标簽的執行個體應用    1. 控制jsp頁面某一部分内容是否執行。2.控制整個jsp頁面是否執行。3.控制jsp頁面内容重複執行。  4. 修改jsp頁面内容輸出。

   好了關于傳統的自定義标簽到這裡就介紹完了,後面将會為大家介紹簡單标簽的使用!

繼續閱讀