当需要处理标签体时,标签处理类应继承BodyTagSupport:
一、需求分析:
数据展示是常有长字符串会影响页面显示效果,需要对其按一定和长度和形式进行省略。来控制显示效果。
二、标签处理类:
public class StringOmitTag extends BodyTagSupport{ private static final long serialVersionUID = -1385010302157701800L; /** * */ private int maxLength; //限定的最长字数 private String suffix; //后缀 private String value; //要处理的值 public int getMaxLength() { return maxLength; } public void setMaxLength(int maxLength) { this.maxLength = maxLength; } public String getSuffix() { return suffix; } public void setSuffix(String suffix) { this.suffix = suffix; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public int doAfterBody() throws JspException { if(null==value){ value=bodyContent.getString(); } return SKIP_BODY; } @Override public int doEndTag() throws JspException { if(null==value){ value=""; } //JspWriter out = super.getBodyContent().getEnclosingWriter(); JspWriter out = pageContext.getOut(); try { if(value.length()>maxLength){ value=value.substring(0, maxLength); if(suffix!=null && !"".equals(suffix)){ value+=suffix; } } out.print(value); } catch (IOException e) { e.printStackTrace(); } return EVAL_PAGE; }}
三、标签描述文件:
将下面的内容加入tld文件中。以增加web应用对上面的标签类的支持
<tag> <name>StringOmit</name> <tag-class>cn.lvlf.framework.tags.StringOmitTag</tag-class> <body-content>jsp</body-content> <attribute> <name>maxLength</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>int</type> </attribute> <attribute> <name>suffix</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
四、标签应用:
在jsp头加上:
<%@ taglib uri="/WEB-INF/tld/mytags.tld" prefix="my" %>
应用代码:
<my:StringOmit maxLength="5" suffix="..." value="abcdefghijklmnopqrstuvwxyz"/>
当不指定value值,标签将处理标签体内的内容:
<my:StringOmit maxLength="5" suffix="..."/><my:StringOmit maxLength="5" suffix="..."></my:StringOmit><my:StringOmit maxLength="5" suffix="..." value="abcdefgasdfadsf"/><br><my:StringOmit maxLength="5" suffix="..." value="41234123412341"></my:StringOmit><br><my:StringOmit maxLength="5" suffix="...">fasdfasdfasdfasdfa</my:StringOmit>
五、备注
1、在这里只需实现BodyTagSupport类的实现BodyTagSupport类的doAfferBody()和doEndTag()方法即可。
2、value属性和标签体内容都不是必须的。所以在jsp中可能灵活运用。当设置value属性时。取value输出。没有value时。取标签体内容输出。二者都没有也不会报错
3、当没有标签体时。doAfterBody()是不会被执行的。所以最终要在doEndTag()方法中对最终输出作统一处理。