【发布时间】:2014-06-24 16:56:05
【问题描述】:
我正在开发一个 jsf 应用程序。我有一个数据表,我使用一列来呈现 Pojo 的描述。
问题是:这个描述太长了,dataTable 不是很清晰。 有没有办法限制要在此数据表的描述列上呈现的字符数,例如:Description desc desc ...
【问题讨论】:
我正在开发一个 jsf 应用程序。我有一个数据表,我使用一列来呈现 Pojo 的描述。
问题是:这个描述太长了,dataTable 不是很清晰。 有没有办法限制要在此数据表的描述列上呈现的字符数,例如:Description desc desc ...
【问题讨论】:
如果您使用的是 JSF 2,则可以使用来自 the OmniFaces project 的函数 of:abbreviate。
将JAR file 放入您的WEB-INF/lib,在您的XHTML 文件中相应地配置命名空间,如下所示:
<html ... xmlns:of="http://omnifaces.org/functions">
然后你可以在任何 String 属性上使用它,像这样:
<h:column>
<h:outputText value="#{of:abbreviate(someBean.myproperty, 20)}" />
</h:column>
【讨论】:
如果是从数据库中获取字符串,请尝试在从数据库中获取数据时直接使用 Substring SQL 函数截断数据。
如果没有,您可以尝试以下解决方案。
假设您正在使用的 POJO 类(称为 MyPOJO)包含一个名为 description 的字符串属性。现在 DataTable 将链接到该对象的 List 或 Map 等...,让我们暂时将其设为 "ArrayList<MyPOJO> theList"。
你可以做的是在同一个类中拥有另一个属性MyPOJO。声明为 String descriptionTruncated 并在该字符串的 getter 方法中写入以下内容:
public String getDescriptionTruncated() {
if (this.description == null) {
return description;
} else if (this.description.length() <= 20 ) {
return description;
} else {
return description.substring(0,19);
}
}
我们在这里假设所需的长度是 20。
然后在 Datatable 中像这样引用新创建的字符串:
<h:datatable ... var="pojoObj">
<h:column>
<h:outputText value="#{pojoObj.descriptionTruncated}" />
</h:column>
希望对您有所帮助。
【讨论】: