「乾淨」的方法是使用一個函數。由於JSTL join
函數在Collection
上不起作用,所以您可以自己編寫而不會有太多麻煩,並且可以在整個位置重複使用它,而不是剪切並粘貼大量循環代碼。
您需要功能實現和一個頂級域名讓您的Web應用程序知道在哪裏可以找到它。將它們放在一個JAR中,並放到WEB-INF/lib目錄中。
這裏有一個輪廓:
COM/X /標籤庫/核心/ StringUtil.java
package com.x.taglib.core;
public class StringUtil {
public static String join(Iterable<?> elements, CharSequence separator) {
StringBuilder buf = new StringBuilder();
if (elements != null) {
if (separator == null)
separator = " ";
for (Object o : elements) {
if (buf.length() > 0)
buf.append(separator);
buf.append(o);
}
}
return buf.toString();
}
}
META-INF/xc.tld:
<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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>x-c</short-name>
<uri>http://dev.x.com/taglib/core/1.0</uri>
<function>
<description>Join elements of an Iterable into a string.</description>
<display-name>Join</display-name>
<name>join</name>
<function-class>com.x.taglib.core.StringUtil</function-class>
<function-signature>java.lang.String join(java.lang.Iterable, java.lang.CharSequence)</function-signature>
</function>
</taglib>
雖然TLD是有一點冗長,知道你的解決方法對於任何使用JSP的開發人員來說都是一項很好的技能。而且,由於您選擇了像JSP這樣的標準進行演示,因此很有可能您的工具可以幫助您解決問題。
與添加更多方法到基礎模型的替代方法相比,此方法具有許多優點。這個函數可以寫一次,並在任何項目中重用。它適用於封閉源代碼的第三方庫。不同的分隔符可以在不同的上下文中得到支持,而不會爲每個模型使用新的方法來污染模型API。
最重要的是,它支持視圖和模型控制器開發角色的分離。這兩個領域的任務往往由不同的人在不同的時間進行。保持這些層之間的鬆散耦合將複雜性和維護成本降至最低。如果在演示文稿中使用不同的分隔符等簡單的更改需要程序員修改庫,那麼您的系統會非常昂貴且繁瑣。
StringUtil
類是相同的,無論它是否暴露EL功能。唯一「額外」必要的是TLD,這是微不足道的;一個工具可以很容易地生成它。
的可能的複製[JSP EL字符串連接(http://stackoverflow.com/questions/3189642/jsp-el-string-concatenation) – 2015-10-22 12:57:20