600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 自定义EL函数解决JSTL标签不足之处——按字节长度截取字符串

自定义EL函数解决JSTL标签不足之处——按字节长度截取字符串

时间:2023-01-01 20:47:57

相关推荐

自定义EL函数解决JSTL标签不足之处——按字节长度截取字符串

题外话:做过大型网站前台的Web开发程序员最头疼的事情就是前台首页的布局,这其中最最头疼的就是标题字符的截取的问题,虽然有fn:substring,但表现率以及对中文的支持均不够完善,其实最终还是归结为客户要求太高了,不过做事情就应该严谨嘛,尤其干我们这一行。。在我们老大的指点下,了解了如何自定义EL函数,哈哈,今天实现了它。

开发步骤:

1、 添加实现静态方法

/** * @author X.Ing's Blog */ public class StringUtils { /** * @param str: * source string * @param width: * string's byte width * @param ellipsis: * a string added to abbreviate string bottom * @return String Object * @author X.Ing's Blog * @see <a href="/xxd851116/" mce_href="/xxd851116/">X.Ing's Blog</a> */ public static String abbreviate(String str, int width, String ellipsis) { if (str == null || "".equals(str)) { return ""; } int d = 0; // byte length int n = 0; // char length for (; n < str.length(); n++) { d = (int) str.charAt(n) > 256 ? d + 2 : d + 1; if (d > width) { break; } } if (d > width) { n = n - ellipsis.length() / 2; return str.substring(0, n > 0 ? n : 0) + ellipsis; } return str = str.substring(0, n); } }

2、 添加标签库描述符tld文件(Tag Library Descriptor),在其中注册该静态方法

<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0"> <description>StringUtils</description> <tlib-version>1.0</tlib-version> <short-name>StringUtils</short-name> <uri>/xxd851116</uri> <function> <description>StringUtils</description> <name>abbreviate</name> <function-class>com.xxd.utils.StringUtils</function-class> <function-signature>java.lang.String abbreviate(java.lang.String, int, java.lang.String)</function-signature> </function> </taglib>

3、 在JSP页面导入标签库(不用再Web.xml中说明tld的位置,servlet容器可自动搜索tld文件,因此可打包成jar文件)

<%@taglib uri="/xxd851116" prefix="fnx" %>

注意:

(1) 此处的uri和tld文件中的uri必须相一致,这个不用说明吧?哈哈。

(2) prefix是函数使用前缀。

4、 页面使用,超级简单!

${fnx:abbreviate('要截取的源字符串', '字节长度', '尾部追加字符')}

5、 测试结果

【代码】

<body> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 0, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 1, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 2, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 3, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 4, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 5, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 6, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 7, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 8, '')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 9, '')} <br /> <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 0, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 1, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 2, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 3, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 4, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 5, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 6, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 7, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 8, '...')} <br /> ${fnx:abbreviate('a我b是c,中d国e人f', 2 * 9, '...')} <br /> </body>

【结果】

a

a我b

a我b是

a我b是c

a我b是c,

a我b是c,中d

a我b是c,中d国

a我b是c,中d国e

a我b是c,中d国e人f

...

...

a我...

a我b...

a我b是...

a我b是c...

a我b是c,中...

a我b是c,中d...

a我b是c,中d国...

a我b是c,中d国e人f

【源码下载】:/source/1618386

文章原创,转载请注明出处:/xxd851116

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。