现在的位置: 首页 > 综合 > 正文

自定义嵌套标签实现IF ELSE

2013年08月03日 ⁄ 综合 ⁄ 共 3765字 ⁄ 字号 评论关闭

三个标签类:PowerIfTag是外边的,用来判断,PowerYesTag是里边的表示if(true)时,PowerNoTag是else]

 

 

PowerIfTag.java

  1. package aa;
  2. import java.io.IOException;
  3. import javax.servlet.jsp.JspException;
  4. import javax.servlet.jsp.JspTagException;
  5. import javax.servlet.jsp.JspWriter;
  6. import javax.servlet.jsp.tagext.TagSupport;
  7. public class PowerIfTag extends TagSupport {
  8.     private String list;
  9.     private String name;
  10.     private boolean is;
  11.     
  12.     public boolean isIs() {
  13.         return is;
  14.     }
  15.     public void setIs(boolean is) {
  16.         this.is = is;
  17.     }
  18.     public String getList() {
  19.         return list;
  20.     }
  21.     public void setList(String list) {
  22.         this.list = list;
  23.     }
  24.     public String getName() {
  25.         return name;
  26.     }
  27.     public void setName(String name) {
  28.         this.name = name;
  29.     }
  30.     public int doStartTag() throws JspException {    
  31.         if(name!=null && !name.equals("") && list!=null && !list.equals(""))
  32.         {
  33.             //以下关键代码,大家可以根据自己的需求来改变.
  34.             Object o = this.pageContext.getSession().getAttribute(name);
  35.             if(o instanceof String)
  36.             {
  37.                 String aStr[]=list.split(",");
  38.                 String oStr = (String)o;
  39.                 for(int i=0;i<aStr.length;i++)
  40.                 {
  41.                     if(!aStr[i].equals("") && oStr.indexOf(aStr[i])>-1)
  42.                     {
  43.                         this.is = true;
  44.                         break;
  45.                     }
  46.                 }
  47.             }
  48.         }else
  49.         {
  50.             this.is = false;
  51.         }
  52.         return this.EVAL_PAGE;
  53.     }
  54. }

 

PowerYesTag.java

  1. package aa;
  2. import java.io.IOException;
  3. import javax.servlet.jsp.JspException;
  4. import javax.servlet.jsp.JspTagException;
  5. import javax.servlet.jsp.JspWriter;
  6. import javax.servlet.jsp.tagext.Tag;
  7. import javax.servlet.jsp.tagext.TagSupport;
  8. public class PowerYesTag extends TagSupport {
  9.     public int doStartTag() throws JspException {    
  10.         Tag t = findAncestorWithClass(this, PowerIfTag.class);   
  11.         if(t!=null)
  12.         {
  13.             PowerIfTag parent = (PowerIfTag) t;
  14.             if(parent.isIs())
  15.             {
  16.                 return EVAL_PAGE;
  17.             }
  18.         }
  19.         return SKIP_BODY;
  20.     }
  21. }

PowerNoTag.java

  1. package aa;
  2. import java.io.IOException;
  3. import javax.servlet.jsp.JspException;
  4. import javax.servlet.jsp.JspTagException;
  5. import javax.servlet.jsp.JspWriter;
  6. import javax.servlet.jsp.tagext.Tag;
  7. import javax.servlet.jsp.tagext.TagSupport;
  8. public class PowerNoTag extends TagSupport {
  9.     
  10.     public int doStartTag() throws JspException {    
  11.         Tag t = findAncestorWithClass(this, PowerIfTag.class);   
  12.         if(t!=null)
  13.         {
  14.             PowerIfTag parent = (PowerIfTag) t;
  15.             if(!parent.isIs())
  16.             {
  17.                 return EVAL_PAGE;
  18.             }
  19.         }
  20.         return SKIP_BODY;
  21.     }
  22. }

powerif.tld

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <taglib>
  3. <tlib-version>1.0</tlib-version>
  4. <jsp-version>1.2</jsp-version>
  5. <tag>
  6.   <name>pif</name>
  7.   <tag-class>aa.PowerIfTag</tag-class>
  8.   <attribute>
  9.     <name>list</name>
  10.     <required>true</required>
  11.     <rtexprvalue>true</rtexprvalue>
  12.   </attribute>
  13.   <attribute>
  14.     <name>name</name>
  15.     <required>true</required>
  16.     <rtexprvalue>true</rtexprvalue>
  17.   </attribute>
  18. </tag>
  19. <tag>
  20.   <name>pyes</name>
  21.   <tag-class>aa.PowerYesTag</tag-class>
  22. </tag>
  23. <tag>
  24.   <name>pno</name>
  25.   <tag-class>aa.PowerNoTag</tag-class>
  26. </tag>
  27. </taglib>

使用例子:

<td>
         <powerif:pif name="functStr" list="01010102">
          <powerif:pyes>
          <a href="/company.do?method=preUpdate&companyCode=${company.companyCode}" onclick="alink(this);">${company.companyCode}</a>
          </powerif:pyes>
          <powerif:pno>
          ${company.companyCode}
          </powerif:pno>
         </powerif:pif>
        </td>

 

为何要自定义标签,就是因为有些别人写的标签不一定会合适自己的需要.像我所写的是关于权限的判断.大家用的时候要注意灵活点.

修改PowerIfTag中的业务代码就可以根据需求来灵活变换,我现在是判断权限,大家也可以根据自己的项目需求来改变.

 

抱歉!评论已关闭.