5D艺术网首页
商城
|
资讯
|
作品
|
博客
|
教程
|
论坛
登录
注册
加为好友
发短消息
来自:不正常人类研究中心
性别:先生
最后登录:2008-11-03
http://samuel.5d.cn/
我是来买馒头的~
首页
|
新闻
|
话题
|
博客
|
相册
|
艺术作品
|
社交关系
|
留言板
|
社交圈
2005/03/08 | 使用XML自定义TAG实战
类别(Programme)
|
评论
(7)
|
阅读(374)
|
发表于 10:59
很多字段在显示时需要截取一部分,避免破坏页面布局。之前我一直用js达到这一功能,时间长了发现很多弊端:js对“\”的转义有问题;文本段落换行也会造成js错误;且代码比较难看,要在html里插入很多类似<script>......</script>的代码;在action里实现过于繁琐,因为字段过多;在jsp里用java代码实现那我还用struts干吗?
于是决定用自定义的tag。
首先定义TLD文件:
在WEB-INF下建立partage.tld,内容如下
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>partage</short-name>
<uri>http://jakarta.apache.org/struts/tags-logic-1.0</uri>
<display-name>Nif partage</display-name>
<description>Nif partage library</description>
<tag>
<name>out</name>
<!-- 这里是自己定义的tag类 -->
<tag-class>com.elite.btb.webapp.taglib.PartageTag</tag-class>
<body-content>empty</body-content>
<!-- 我只需要value和length两个属性 -->
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>length</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
写对应的tag类Partage.java,内容如下:
package com.elite.btb.webapp.taglib;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.struts.util.ResponseUtils;
import javax.servlet.jsp.*;
import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
public class PartageTag extends BodyTagSupport {
public void setvalue(String value) {
this.value = value;
}
public void setLength(int length) {
this.length = length;
}
public String getvalue() {
return value;
}
public int getLength() {
return length;
}
public PartageTag() {
}
private String value;
private int length;
public int doStartTag() throws JspException {
try {
//-- 这里的value通过使用JSTL的c:out来取值,可以取得 ${}的内容。
value = (String) ExpressionUtil.evalNotNull("out", "value", value, Object.class, this, pageContext);
if (value != null || !value.equals("")) {
//-- 对内容进行过滤。
value = ResponseUtils.filter(value);
if (value.length() > length) {
String output = value.substring(0, length) + "...";
ResponseUtils.write(pageContext, output);
return 0;
}
ResponseUtils.write(pageContext, value);
}
}
catch (Exception ex1) {
value = null;
}
return 0;
}
}
在JSP里使用自定义标签partage
首先声明<%@ taglib uri="/WEB-INF/partage.tld" prefix="partage" %>
在需要截取的地方使用标签<partage:out value="${infoList.introText}" length="20"/>
其中${infoList.introText}是我要截取的内容,length是长度,若内容大于长度截取完后会自动在末尾添加“...”。
Tomcat测试通过,感觉自定义tag非常好用,利于代码复用,也不会在jsp里造成杂乱的代码,保持了html的tag风格。:)
0
评论
Comments
日志分类
首页
[50]
MyBlog
[11]
WebService
[3]
Programme
[19]
Pastime
[17]