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:没属性,没成员
-->