现在的位置: 首页 > 综合 > 正文

jsp自定义标签实现java的switch……case实例

2013年08月18日 ⁄ 综合 ⁄ 共 3305字 ⁄ 字号 评论关闭

1、实现MySwitchTag类

package class3g.web.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MySwitchTag extends SimpleTagSupport {
	private int exp;
	
	private boolean lastCase_break = false;  //上一个标签的break状态
	private boolean lastCase_done = false;  //上一个标签的执行状态
	
	private boolean terminate = false;
	

	public boolean isLastCase_break() {
		return lastCase_break;
	}

	public void setLastCase_break(boolean lastCase_break) {
		this.lastCase_break = lastCase_break;
	}

	public boolean isLastCase_done() {
		return lastCase_done;
	}

	public void setLastCase_done(boolean lastCase_done) {
		this.lastCase_done = lastCase_done;
	}

	public boolean isTerminate() {
		return terminate;
	}

	public void setTerminate(boolean terminate) {
		this.terminate = terminate;
	}

	public int getExp() {
		return exp;
	}

	public void setExp(int exp) {
		this.exp = exp;
	}


	@Override
	public void doTag() throws JspException, IOException {
		this.getJspBody().invoke(null);
	}


}

实现MyCaseTag类

package class3g.web.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MyCaseTag extends SimpleTagSupport {
	private int value;
	private boolean breakSwitch;

	public void setValue(int value) {
		this.value = value;
	}

	public void setBreakSwitch(boolean breakSwitch) {
		this.breakSwitch = breakSwitch;
	}

	@Override
	public void doTag() throws JspException, IOException {
		MySwitchTag parent = (MySwitchTag) this.getParent();

		if (parent.isTerminate() == false) {
			if (parent.isLastCase_done() == false) {
				if (parent.getExp() == value) {
					this.getJspBody().invoke(null);
					parent.setLastCase_done(true);

					parent.setTerminate(breakSwitch);
				}
			} else {
				if (parent.isLastCase_break() == false) {
					this.getJspBody().invoke(null);
					parent.setLastCase_done(true);
					parent.setLastCase_break(breakSwitch);

					parent.setTerminate(breakSwitch);

				}
			}
		}
	}

}

实现MyDefaultTag类

package class3g.web.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MyDefaultTag extends SimpleTagSupport {

	@Override
	public void doTag() throws JspException, IOException {
		MySwitchTag parent =  (MySwitchTag) this.getParent();
		if(parent.isTerminate() == false){
			this.getJspBody().invoke(null);
			parent.setTerminate(true);
		}
	}

}

2、修改tld文件

<tag>
		<description>switch tag</description>
        <name>switch</name>
		<tag-class>class3g.web.tag.MySwitchTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>exp</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
    </tag>
    
    
    <tag>
		<description>case tag </description>
        <name>case</name>
		<tag-class>class3g.web.tag.MyCaseTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>value</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>breakSwitch</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
    </tag>
    
    <tag>
		<description>default </description>
        <name>default</name>
		<tag-class>class3g.web.tag.MyDefaultTag</tag-class>
		<body-content>scriptless</body-content>
    </tag>

3、在jsp实用自定义标签

 <g:switch exp="2">
    	<g:case value="1" breakSwitch="true" >
    		11111111111<br/>
    	</g:case>
    	<g:case value="2" breakSwitch="false" >
    		22222222222222<br/>
    	</g:case>
    	<g:case value="3" breakSwitch="true" >
    		333333333333333<br/>
    	</g:case>
    	<g:default>
    		dddddddddddddddddd<br/>
    	</g:default>    
    </g:switch>
    <!-- 
    	switch:带有一个exp属性,三个成员变量
    		terminate作为中断执行break的标志
    		lastCase_Done:上一个case标签的执行状态
    		lastCase_break:上一个case标签的break值状态    		
    		
    	case:两个属性,value和布尔型的breakSwitch,没成员
    	default:没属性,没成员
     -->

抱歉!评论已关闭.