JSP自定义标签实例之:BodyTagSupport

当需要处理标签体时,标签处理类应继承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()方法中对最终输出作统一处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值