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