gpt4 book ai didi

jsf - 扩展 h :outputText for custom functionality

转载 作者:行者123 更新时间:2023-12-03 15:40:25 25 4
gpt4 key购买 nike

我已经使用 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>

但是我在很多地方都使用了这段代码(并希望避免每次 8 行的样板代码),所以想到了自定义 h:outputText 来提供修剪功能。

你能告诉我如何在 JSF 中编写自定义标签吗

问候,
萨蒂亚

最佳答案

假设您使用的是 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?

关于jsf - 扩展 h :outputText for custom functionality,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9396526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com