javascript
自定义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="http://blog.csdn.net/xxd851116/" mce_href="http://blog.csdn.net/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="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/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>http://blog.csdn.net/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="http://blog.csdn.net/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
?
【源碼下載】:http://download.csdn.net/source/1618386
?
文章原創,轉載請注明出處:http://blog.csdn.net/xxd851116
轉載于:https://www.cnblogs.com/xingxiudong/archive/2009/08/30/3987060.html
總結
以上是生活随笔為你收集整理的自定义EL函数解决JSTL标签不足之处——按字节长度截取字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七分钟理解什么是 KMP 算法
- 下一篇: [转]OpenCL 教学(一)