<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標(biāo)簽。

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

        相信很多使用jstl的朋友都抱怨過,為什么jstl只有<c:if 而沒有elseif、else。當(dāng)需要判斷多個條件的時候,只能寫多個<c:if 或者使用<c:choose。
    雖然struts有elseif 和 else標(biāo)簽,不過看著就跟多個<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){        // 當(dāng)前條件為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標(biāo)簽。  回復(fù)  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    謝謝支持,^_^
    主站蜘蛛池模板: 亚洲av日韩精品久久久久久a| 一级做a爱片特黄在线观看免费看| 免费无码看av的网站| 91成人在线免费观看| 91免费国产精品| 亚洲最大免费视频网| 婷婷久久久亚洲欧洲日产国码AV | 亚洲乱码中文字幕在线| 亚洲天堂中文字幕在线观看| 亚洲精品视频在线播放| 亚洲明星合成图综合区在线| 亚洲综合伊人制服丝袜美腿| 中国亚洲呦女专区| 亚洲色欲色欲www在线播放| 亚洲变态另类一区二区三区| 在线观看亚洲网站| 国产免费人成视频尤勿视频| a级毛片无码免费真人久久| 久久免费观看国产精品| 免费大片黄在线观看| 精品国产免费人成网站| 免费污视频在线观看| 一级成人生活片免费看| 丁香花在线视频观看免费| 在线a免费观看最新网站| 成人爽A毛片免费看| 免费人成视频在线观看不卡| 狠狠综合久久综合88亚洲| 亚洲日本va午夜中文字幕一区| 免费在线观看中文字幕| 亚洲线精品一区二区三区| 国产精品麻豆免费版| 在线a级毛片免费视频| 成人人观看的免费毛片| 国产小视频免费观看| 国产亚洲精品xxx| 亚洲一级在线观看| 视频一区在线免费观看| 亚洲国产AV无码一区二区三区| 亚洲一区二区三区高清视频| 亚洲av日韩专区在线观看|