<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 36, comments - 419, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    實現(xiàn)if elseif else的jsp標簽。

    Posted on 2010-07-28 16:13 BearRui(AK-47) 閱讀(4247) 評論(29)  編輯  收藏 所屬分類: Java

        相信很多使用jstl的朋友都抱怨過,為什么jstl只有<c:if 而沒有elseif、else。當需要判斷多個條件的時候,只能寫多個<c:if 或者使用<c:choose。
    雖然struts有elseif 和 else標簽,不過看著就跟多個<c:if 沒什么2樣,使用如下:

    <s:if test="">  

    1

    </s:if>

    <s:elseif test="">

      2

    </s:elseif>

    <s:else>

       3

    </s:else>

    下面是本人實現(xiàn)的if elseif else。先看看使用代碼:

    <g:if test="">

       1

    <g:elseif test="" /> 

      2

    <g:else /> 

      3

    </g:if>

          這樣代碼結(jié)構(gòu)個人覺得更加清晰簡單,類似freemarker的if elseif。

    實現(xiàn):

    要實現(xiàn)上面說的if elseif,需要繼承BodyTagSupport,利用BodyTagSupport的bodyContent的來實現(xiàn)該功能,這里不具體介紹如何實現(xiàn)jsp tag。直接貼出所有代碼,有興趣的自己看看。 

    public class IfTag extends BodyTagSupport{

        
    public IfTag() {
            
    super();
            init();
        }

        @Override
        
    public void release() {
            
    super.release();
            init();
        }
        
        @Override
        
    public int doStartTag() throws JspException {
            
    if(test){
                
    this.succeeded();
            }
            
    return EVAL_BODY_BUFFERED;
        }

        @Override
        
    public int doEndTag() throws JspException {
            
    try {
                
    if(subtagSucceeded)
                    pageContext.getOut().write(getBody());
            } 
    catch (IOException e) {
                
    throw new JspException("IOError while writing the body: " + e.getMessage(), e);
            }
            
            init();
            
    return super.doEndTag();
        }
        
        
    private String body = null;        //    用于存放成功條件后的內(nèi)容
        public void setBody(){
            
    if(body == null){
                body 
    = bodyContent.getString().trim();
            }
        }
        
        
    private String getBody(){
            
    if(body == null)
                
    return bodyContent.getString().trim();
            
    else
                
    return body;
        }
        
        
    /**
         * 判斷if 或者 子 else if是否提交成功
         
    */
        
    private boolean subtagSucceeded;
        
        
    /**
         * 子條件判斷成功
         
    */
        
    public void succeeded(){
            subtagSucceeded 
    = true;
        }
        
    /**
         * 是否已經(jīng)執(zhí)行完畢
         * 
    @return
         
    */
        
    public boolean isSucceeded(){
            
    return subtagSucceeded;
        }
        
        
    private void init() {
            test 
    = false;
            subtagSucceeded 
    = false;
            body 
    = null;
        }
        
        
    private boolean test;  
        
        
    public void setTest(boolean test) {
            
    this.test = test;
        }
    }

     

     


    public class ElseIfTag extends BodyTagSupport{

        
    public ElseIfTag() {
            
    super();
            init();
        }

        @Override
        
    public int doStartTag() throws JspException {
            Tag parent 
    = getParent();

            
    if(parent==null || !(parent instanceof IfTag)){
                
    throw new JspTagException("else tag must inside if tag");
            }
            
            IfTag ifTag 
    = (IfTag)parent;
            
    if(ifTag.isSucceeded()){
                
    // 已經(jīng)有執(zhí)行成功的條件,保存之前的html
                ifTag.setBody();
            }
    else if(test){        // 當前條件為true,之前無條件為true
                ifTag.succeeded();
                
    // 則清除之前的輸出
                ifTag.getBodyContent().clearBody();
            }
                
            
    return EVAL_BODY_BUFFERED;
        }
         
        @Override
        
    public void release() {
            
    super.release();
            init();
        }
        
        
    private void init() {
            test 
    = false;
        }
        
        
    private boolean test;  
        
        
    public void setTest(boolean test) {
            
    this.test = test;
        }
    }

     
    public class ElseTag extends BodyTagSupport{

        
    public void release() {
            
    super.release();
        }
        
        
    public int doStartTag() throws JspException {
            Tag parent 
    = getParent();

            
    if(parent==null || !(parent instanceof IfTag)){
                
    throw new JspTagException("else tag must inside if tag");
            }
            
            IfTag ifTag 
    = (IfTag)parent;
            
    if(ifTag.isSucceeded()){
                
    // 已經(jīng)有執(zhí)行成功的條件,保存之前的html
                ifTag.setBody();
            }
    else{
                
    // 之前沒有的判斷沒有成功條件,則清除之前的輸出
                ifTag.getBodyContent().clearBody();
                ifTag.succeeded();
            }
                
            
    return EVAL_BODY_BUFFERED;
        }
        
    }


    tld配置就不貼出來了,因為這個太簡單了,大家都知道的。

    [作者]:BearRui(AK-47)
    [博客]: http://www.tkk7.com/bearrui/
    [聲明]:本博所有文章版權(quán)歸作者所有(除特殊說明以外),轉(zhuǎn)載請注明出處.
    英雄,別走啊,幫哥評論下:  

    精彩推薦 好文要頂 水平一般 看不懂 還需努力

    評論

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:10 by popo4j
    好文章,頂一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:10 by popo4j
    文章很精彩,推薦一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:10 by popo4j
    好文章,頂一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:10 by popo4j
    文章寫的一般般,:)

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:10 by popo4j
    看不懂哦,~_~

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:10 by popo4j
    博主還需努力啊!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    看不懂哦,~_~

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章寫的一般般,:)

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    好文章,頂一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章很精彩,推薦一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    好文章,頂一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章寫的一般般,:)

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    看不懂哦,~_~

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    博主還需努力啊!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    看不懂哦,~_~

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章寫的一般般,:)

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    好文章,頂一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章很精彩,推薦一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    好文章,頂一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章寫的一般般,:)

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    看不懂哦,~_~

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    博主還需努力啊!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    看不懂哦,~_~

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章寫的一般般,:)

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:11 by popo4j
    文章很精彩,推薦一下!

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-29 17:14 by BearRui(AK-47)
    暈,樓上的干嘛了。

    # re: 實現(xiàn)if elseif else的jsp標簽。[未登錄]  回復(fù)  更多評論   

    2010-07-30 09:40 by alan
    ......

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-07-30 11:03 by 凡客
    文章很精彩

    # re: 實現(xiàn)if elseif else的jsp標簽。  回復(fù)  更多評論   

    2010-08-01 22:43 by BearRui(AK-47)
    @凡客

    謝謝支持,^_^
    主站蜘蛛池模板: 毛片无码免费无码播放| 国产极品美女高潮抽搐免费网站| 亚洲a级片在线观看| 日韩免费三级电影| a成人毛片免费观看| 亚洲成人免费网址| 亚洲国产一成久久精品国产成人综合 | 久久精品国产亚洲AV| 亚洲中文字幕无码久久精品1 | yellow免费网站| 亚洲av无码片区一区二区三区| 亚洲Av无码国产情品久久 | 亚洲av再在线观看| 美女内射毛片在线看免费人动物| 日韩色视频一区二区三区亚洲| 久久综合图区亚洲综合图区| 国产乱子伦精品免费无码专区| 6080午夜一级毛片免费看 | 国产成人1024精品免费| 亚洲一区二区三区在线| 亚洲色欲久久久综合网东京热| 天天摸夜夜摸成人免费视频| 午夜精品一区二区三区免费视频| 亚洲AV性色在线观看| 亚洲欧洲自拍拍偷午夜色| 亚洲日韩精品无码专区网站| 最近中文字幕mv免费高清电影| 美女被cao网站免费看在线看| 黄色三级三级免费看| 亚洲三级在线观看| 亚洲网站视频在线观看| 亚洲免费人成在线视频观看| 国产91久久久久久久免费| av无码国产在线看免费网站| 免费91最新地址永久入口| 一级美国片免费看| 精品免费AV一区二区三区| 精品国产日韩久久亚洲| 亚洲精品视频在线免费| 午夜亚洲AV日韩AV无码大全| 亚洲色大成网站www永久一区|