在 JSP 頁面使用 JSTL <c:forEach> 遍歷列表顯示標題時,需將超過 5 個中文字的標題截斷並顯示「...」。
<c:forEach items="${list}" var="email">
<tr><td> ${email.etile} </td></tr>
</c:forEach>
<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
<c:choose>
<c:when test="${fn:length(email.etile) > 5}">
${fn:substring(email.etile, 0, 5)}...
</c:when>
<c:otherwise>
${email.etile}
</c:otherwise>
</c:choose>
1. 編寫 Java 類
public class StringUtils {
public static String truncate(String str, int len) {
if (str == null) return "";
return str.length() > len ? str.substring(0, len) + "..." : str;
}
}
2. 定義 TLD 檔 (/WEB-INF/tlds/functions.tld)
<function>
<name>truncate</name>
<function-class>com.example.StringUtils</function-class>
<function-signature>java.lang.String truncate(java.lang.String, int)</function-signature>
</function>
3. JSP 使用
<%@ taglib prefix="my" uri="/WEB-INF/tlds/functions.tld" %>
${my:truncate(email.etile, 5)}
<%
String title = email.getEtile();
if (title.length() > 5) title = title.substring(0,5) + "...";
out.print(title);
%>
substring 按字元而非位元組截取,Java 內部 char[] 正確處理 BMP 字元;涉及 Emoji (補充平面) 需用 codePointCount/offsetByCodePoints。