Sat*_*tya 5 jsf jstl richfaces jsf-1.2
我已经使用JSF + RF超过2年,并且没有机会扩展组件的现有功能.
现在要求是我必须修剪字符串并显示它超过25个字符.
这已经实现如下
<c:choose>
<c:when test="#{fn:length(teststep.name) > 25}">
<h:outputText title="#{teststep.name}" value="#{fn:substring(teststep.name, 0, 25)}..."/>
</c:when>
<c:otherwise>
<h:outputText title="#{teststep.name}" value="#{teststep.name}"/>
</c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)
但是我在很多地方使用这个代码(并且希望每次都避免使用8行的样板代码)所以想到自定义h:outputText来提供修剪功能.
你能告诉我如何在JSF中编写自定义标签吗?
此致,萨蒂亚
Bal*_*usC 11
假设您使用的是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>
Run Code Online (Sandbox Code Playgroud)
然后你可以参考如下:
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
...
<my:outputLimitedText value="#{teststep.name}" maxlength="25" />
Run Code Online (Sandbox Code Playgroud)
你也可以使用Converter.
<h:outputText title="#{teststep.name}" value="#{teststep.name}">
<f:converter converterId="substringConverter" />
<f:attribute name="maxlength" value="25" />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)
同
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以创建自定义EL功能.所以你最终得到了
<h:outputText title="#{teststep.name}" value="#{util:ellipsis(teststep.name, 25)}">
Run Code Online (Sandbox Code Playgroud)
这个答案给出了EL函数的一个具体例子:如何在EL中连接字符串?
| 归档时间: |
|
| 查看次数: |
6917 次 |
| 最近记录: |