自定义choose,when,otherwise标签

自定义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>








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值