当前位置: 代码迷 >> Web前端 >> 深入体味JavaWeg开发内幕――使用传统自定义标签的实例应用
  详细解决方案

深入体味JavaWeg开发内幕――使用传统自定义标签的实例应用

热度:166   发布时间:2012-11-26 11:48:49.0
深入体验JavaWeg开发内幕――使用传统自定义标签的实例应用

          关于传统自定义标签也就是继承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>

效果一




//忽略标签体

public class ShowInnerLableContent extends TagSupport {

@Override
	public int doStartTag() throws JspException {
		
	
		//	此字段在doStartTag()中不适用,其作用是控制JSP页面中部分内容是否执行,也就是说无法实现对整个页面内容的限定
		return this.SKIP_BODY;
	
	}
  
}

//其他文件不做变化。



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%>">
    
    <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>




//忽略标签体后的页面内容:

 

public class ShowInnerLableContent1 extends TagSupport {

@Override
	public int doEndTag() throws JspException {
	   	
// 该方法只是对自定义标签结束时调用,以判断该标签之后的内容是否显示
		return this.SKIP_PAGE;

	}
}


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>


  

  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>


   好了关于传统的自定义标签到这里就介绍完了,后面将会为大家介绍简单标签的使用!

  相关解决方案