JSP自定义标签实例之:BodyTagSupport

当需要处理标签体时,标签处理类应继承BodyTagSupport: 
一、需求分析: 
数据展示是常有长字符串会影响页面显示效果,需要对其按一定和长度和形式进行省略。来控制显示效果。 

二、标签处理类: 
Java代码   收藏代码
  1. public class StringOmitTag extends BodyTagSupport{  
  2.     private static final long serialVersionUID = -1385010302157701800L;  
  3.     /** 
  4.      *  
  5.      */  
  6.     private int maxLength;  //限定的最长字数  
  7.     private String suffix;  //后缀  
  8.     private String value;   //要处理的值  
  9.   
  10.   
  11.     public int getMaxLength() {  
  12.         return maxLength;  
  13.     }  
  14.   
  15.   
  16.     public void setMaxLength(int maxLength) {  
  17.         this.maxLength = maxLength;  
  18.     }  
  19.   
  20.   
  21.     public String getSuffix() {  
  22.         return suffix;  
  23.     }  
  24.   
  25.   
  26.     public void setSuffix(String suffix) {  
  27.         this.suffix = suffix;  
  28.     }  
  29.   
  30.   
  31.     public String getValue() {  
  32.         return value;  
  33.     }  
  34.   
  35.   
  36.     public void setValue(String value) {  
  37.         this.value = value;  
  38.     }  
  39.   
  40.   
  41.     @Override  
  42.     public int doAfterBody() throws JspException {  
  43.         if(null==value){  
  44.             value=bodyContent.getString();  
  45.         }  
  46.           
  47.         return SKIP_BODY;  
  48.     }  
  49.   
  50.   
  51.     @Override  
  52.     public int doEndTag() throws JspException {  
  53.         if(null==value){  
  54.             value="";  
  55.         }  
  56.         //JspWriter out = super.getBodyContent().getEnclosingWriter();  
  57.         JspWriter out = pageContext.getOut();  
  58.         try {  
  59.             if(value.length()>maxLength){  
  60.                 value=value.substring(0, maxLength);  
  61.                 if(suffix!=null && !"".equals(suffix)){  
  62.                     value+=suffix;        
  63.                 }  
  64.             }  
  65.             out.print(value);  
  66.         } catch (IOException e) {  
  67.             e.printStackTrace();  
  68.         }  
  69.         return EVAL_PAGE;  
  70.     }  
  71. }  


三、标签描述文件: 
将下面的内容加入tld文件中。以增加web应用对上面的标签类的支持 
Java代码   收藏代码
  1. <tag>  
  2.     <name>StringOmit</name>  
  3.     <tag-class>cn.lvlf.framework.tags.StringOmitTag</tag-class>  
  4.     <body-content>jsp</body-content>  
  5.     <attribute>  
  6.         <name>maxLength</name>  
  7.         <required>true</required>  
  8.         <rtexprvalue>true</rtexprvalue>  
  9.         <type>int</type>  
  10.     </attribute>  
  11.     <attribute>  
  12.         <name>suffix</name>  
  13.         <required>false</required>  
  14.         <rtexprvalue>true</rtexprvalue>  
  15.     </attribute>  
  16.     <attribute>  
  17.         <name>value</name>  
  18.         <required>false</required>  
  19.         <rtexprvalue>true</rtexprvalue>  
  20.     </attribute>  
  21. </tag>  


四、标签应用: 
在jsp头加上: 
Java代码   收藏代码
  1. <%@ taglib uri="/WEB-INF/tld/mytags.tld" prefix="my" %>  

应用代码: 
Java代码   收藏代码
  1. <my:StringOmit maxLength="5" suffix="..." value="abcdefghijklmnopqrstuvwxyz"/>  

当不指定value值,标签将处理标签体内的内容: 
Java代码   收藏代码
  1. <my:StringOmit maxLength="5" suffix="..."/>  
  2. <my:StringOmit maxLength="5" suffix="..."></my:StringOmit>  
  3. <my:StringOmit maxLength="5" suffix="..." value="abcdefgasdfadsf"/><br>  
  4. <my:StringOmit maxLength="5" suffix="..." value="41234123412341"></my:StringOmit><br>  
  5. <my:StringOmit maxLength="5" suffix="...">fasdfasdfasdfasdfa</my:StringOmit>  


五、备注 
1、在这里只需实现BodyTagSupport类的实现BodyTagSupport类的doAfferBody()和doEndTag()方法即可。 
2、value属性和标签体内容都不是必须的。所以在jsp中可能灵活运用。当设置value属性时。取value输出。没有value时。取标签体内容输出。二者都没有也不会报错 
3、当没有标签体时。doAfterBody()是不会被执行的。所以最终要在doEndTag()方法中对最终输出作统一处理

你可能感兴趣的:(JSP自定义标签实例之:BodyTagSupport)