假設你正在使用JSP不Facelets的,放在一個.tag
文件中的內容/WEB-INF
,像/WEB-INF/tags/outputLimitedText.tag
。
<%@ tag body-content="empty" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<c:choose>
<c:when test="#{fn:length(value) > maxlength}">
<h:outputText title="#{value}" value="#{fn:substring(value, 0, maxlength)}..."/>
</c:when>
<c:otherwise>
<h:outputText title="#{value}" value="#{value}"/>
</c:otherwise>
</c:choose>
然後你就可以引用它,如下:
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
...
<my:outputLimitedText value="#{teststep.name}" maxlength="25" />
你也可以使用一個Converter
。
<h:outputText title="#{teststep.name}" value="#{teststep.name}">
<f:converter converterId="substringConverter" />
<f:attribute name="maxlength" value="25" />
</h:outputText>
與
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String string = (String) value;
int maxlength = Integer.valueOf((String) component.getAttributes().get("maxlength"));
if (string.length() > maxlength) {
return string.substring(0, maxlength) + "...";
} else {
return string;
}
}
你還可以創建自定義EL函數。所以,你最終與
<h:outputText title="#{teststep.name}" value="#{util:ellipsis(teststep.name, 25)}">
EL函數的具體例子在這個答案給出:How to concatenate Strings in EL?
我已經嘗試了第一個解決辦法,didnt打動我:)但是想這樣做 。是否有可能仍然保留h:outputText的功能,並只添加更多功能? –
Satya
2012-02-22 15:09:32
我會嘗試第三個選項,似乎是對我來說一些新的學習:)。非常感謝BalusC – Satya 2012-02-22 15:10:49
向現有組件添加新屬性只能使用自定義組件,而不能使用自定義標籤。這是一項非常乏味的工作。您必須複製**所有**現有的標籤屬性,因爲它無法從現有標籤繼承。更容易的是提供額外的屬性爲''並覆蓋默認的'Renderer'。 –
BalusC
2012-02-22 15:12:55