父标签:ChooseTag
package tagTest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
public class ChooseTag extends SimpleTagSupport {
private boolean flag = true;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public void doTag() throws JspException, IOException {
getJspBody().invoke(null);
}
}
子标签1:WhenTag
package tagTest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
public class WhenTag extends SimpleTagSupport {
private boolean test;
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test){
ChooseTag chooseTag = (ChooseTag) getParent();
boolean flag = chooseTag.isFlag();
if(flag){
getJspBody().invoke(null);
chooseTag.setFlag(false);
}
}
}
}
子标签2:OtherwiseTag
package tagTest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
public class OtherwiseTag extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
ChooseTag chooseTag = (ChooseTag)getParent();
boolean flag = chooseTag.isFlag();
if(flag){
getJspBody().invoke(null);
}
}
}
配置tld文件
<tag>
<name>choose</name>
<tag-class>tagTest.ChooseTag</tag-class>
<body-content>scriptless</body-content>
</tag>
<tag>
<name>when</name>
<tag-class>tagTest.WhenTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>otherwise</name>
<tag-class>tagTest.OtherwiseTag</tag-class>
<body-content>scriptless</body-content>
</tag>
编写jsp文件
<sky:testForEach collection="${requestScope.customers}" var="cust">${cust.id} -- ${cust.name}<br></sky:testForEach>
<sky:choose>
<sky:when test="${param.age > 24}">大学毕业</sky:when>
<sky:when test="${param.age > 20}">高中毕业</sky:when>
<sky:otherwise>高中以下</sky:otherwise>
</sky:choose>