<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    實現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>

    下面是本人實現的if elseif else。先看看使用代碼:

    <g:if test="">

       1

    <g:elseif test="" /> 

      2

    <g:else /> 

      3

    </g:if>

          這樣代碼結構個人覺得更加清晰簡單,類似freemarker的if elseif。

    實現:

    要實現上面說的if elseif,需要繼承BodyTagSupport,利用BodyTagSupport的bodyContent的來實現該功能,這里不具體介紹如何實現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;        //    用于存放成功條件后的內容
        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;
        }
        
    /**
         * 是否已經執行完畢
         * 
    @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()){
                
    // 已經有執行成功的條件,保存之前的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()){
                
    // 已經有執行成功的條件,保存之前的html
                ifTag.setBody();
            }
    else{
                
    // 之前沒有的判斷沒有成功條件,則清除之前的輸出
                ifTag.getBodyContent().clearBody();
                ifTag.succeeded();
            }
                
            
    return EVAL_BODY_BUFFERED;
        }
        
    }


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

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

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

    評論

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。[未登錄]  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    # re: 實現if elseif else的jsp標簽。  回復  更多評論   

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

    謝謝支持,^_^
    主站蜘蛛池模板: 亚洲色偷偷偷综合网| 中文字幕久精品免费视频| eeuss影院ss奇兵免费com| 午夜国产大片免费观看| 亚洲av色香蕉一区二区三区| 黄床大片30分钟免费看| 国产成人无码a区在线观看视频免费 | 久久久精品视频免费观看| 亚洲色偷偷综合亚洲AV伊人| 老司机免费午夜精品视频| 亚洲日韩国产精品乱| 国产免费福利体检区久久| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲成A人片77777国产| 日韩电影免费在线观看网址| 亚洲精品NV久久久久久久久久| 色多多A级毛片免费看| 国产亚洲精品激情都市| 亚洲无mate20pro麻豆| 在线观看人成视频免费| 国产精品久久久久久亚洲小说| 亚洲国产精品成人久久蜜臀| 美女无遮挡拍拍拍免费视频| 亚洲av永久无码精品古装片| 在线观看免费视频资源| 亚洲熟妇av午夜无码不卡| 亚洲国产一成久久精品国产成人综合 | 亚洲人成色777777在线观看| 久久w5ww成w人免费| 亚洲一卡一卡二新区无人区| 四虎AV永久在线精品免费观看| 国产精品免费久久久久久久久 | 18禁亚洲深夜福利人口| 亚洲性日韩精品一区二区三区 | 女人与禽交视频免费看| 日韩一区二区三区免费播放| 亚洲a在线视频视频| 暖暖在线日本免费中文| 在线观看免费无码视频| 亚洲国产成人精品无码区在线网站 | 暖暖日本免费在线视频|