自定义choose,when,otherwise标签。
1)Jsp文件内容:
(1)引入文件
<%@taglib uri="www.ctags.c" prefix="ctag" %>
(2)文件内容,相当于
<ctag:choose>
<ctag:when test="${10 < 9}">
条件成立1
</ctag:when>
<ctag:when test="${10 > 9}">
条件成立2
</ctag:when>
<ctag:otherwise>
其他情况
</ctag:otherwise>
</ctag:choose>
相当于: if(条件1){
}else if(条件2){
}else if(条件3){
}else{其他情况}
问题1:标签和Java处理器类对应关系?
一个标签一个处理器类。
一个标签在翻译的过程中会在jsp_service()方法中生成一个方法,每个方法都会创建一个处理器类对象。
问题2:otherwise是在前面条件成立的情况下不执行,如果标签之间不交换数据,otherwise会顺序的被执行?如何保证前面条件执行之后后面条件不执行?
通过父标签传递数据。获得父标签对象,然后子标签可以通过getparent获得同一个父标签对象。在父标签对应的处理器类中设置,setXX和getXX方法。子标签之间就可以传递数据。
2)标签处理器类Java文件
Otherwise标签处理器类
public class otherwisetag extends SimpleTagSupport{
//用来获取其他子标签的属性。所以不需要set和get
private boolean test;
public void doTag() throws JspException, IOException {
//获取父标签,choose下的子标签,获取的是同一个父对象。
choosetag choose = (choosetag)this.getParent();
this.test = choose.isFlag();
if(!test){
this.getJspBody().invoke(null);
}
}
}
When标签处理器类
public class whentag extends SimpleTagSupport{
//因为when标签有一个属性,所以需要设置成员变量和setXX方法。
private boolean test;
public void setTest(boolean test) {
this.test = test;
}
public void doTag() throws JspException, IOException {
//获取父标签。choose下的子标签,获取的是同一个父对象。
choosetag choose = (choosetag)this.getParent();
choose.setFlag(test);
if(test){
this.getJspBody().invoke(null);
}
}
}
Choose标签处理器类
public class choosetag extends SimpleTagSupport {
//不是标签属性,是子标签之间传递参数用的。所以需要get,set方法。
private boolean flag;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public void doTag() throws JspException, IOException {
this.getJspBody().invoke(null);
}
}
3)tld文件内容
<tag>
<name>choose</name>
<tag-class>defineLables.choosetag</tag-class>
<body-content>scriptless</body-content>
</tag>
<tag>
<name>when</name>
<tag-class>defineLables.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>defineLables.otherwisetag</tag-class>
<body-content>scriptless</body-content>
</tag>
自定义choose,when,otherwise标签
猜你喜欢
转载自blog.csdn.net/newVenues/article/details/70784610
今日推荐
周排行