【问题标题】:Jsf, Limitting on the number of caracteres to display?Jsf,限制显示的字符数?
【发布时间】:2014-06-24 16:56:05
【问题描述】:

我正在开发一个 jsf 应用程序。我有一个数据表,我使用一列来呈现 Pojo 的描述。

问题是:这个描述太长了,dataTable 不是很清晰。 有没有办法限制要在此数据表的描述列上呈现的字符数,例如:Description desc desc ...

【问题讨论】:

标签: jsf datatable


【解决方案1】:

如果您使用的是 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>

the demo here

【讨论】:

  • 完美的解决方案。谢谢!
【解决方案2】:

如果是从数据库中获取字符串,请尝试在从数据库中获取数据时直接使用 Substring SQL 函数截断数据。

如果没有,您可以尝试以下解决方案。

假设您正在使用的 POJO 类(称为 MyPOJO)包含一个名为 description 的字符串属性。现在 DataTable 将链接到该对象的 List 或 Map 等...,让我们暂时将其设为 "ArrayList&lt;MyPOJO&gt; 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>

希望对您有所帮助。

【讨论】:

  • 不是一个好的解决方案,您不必为了“使其适合”列而截断数据。
  • 你说得很好。其他解决方案可能是使用 SQL Substring 函数在您从数据库中获取数据时直接截断数据。
  • 也不,也许你对 MVC 的概念有误解:模型是应用程序中的数据,视图是向用户显示数据的组件。 View 可能不会向用户显示全部数据,但 Model 可以拥有全部数据。
  • @eljunior 有一个很好的答案,因为您可以在两个不同的视图中使用模型中的相同数据:第一个视图显示数据被截断,第二个视图显示整个数据。记住:视图应该有关于如何显示数据的逻辑。
  • 感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 2016-07-26
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多