【问题标题】:How to sort by JSF label in sortable datatable如何在可排序的数据表中按 JSF 标签排序
【发布时间】:2012-06-16 09:21:10
【问题描述】:

我正在为列中的值显示一个(特定于语言的)标签。该列是可排序的,并且 JSF 标签与数据库值不同。我正在使用带有分页功能的 primefaces 数据表。

如何按标签而不是数据库值排序?是否有任何可能的翻译,以便我的 JPA 标准知道不同的值?

在内存中排序不是一个选项,因为数据集可能很大,我只想显示一个子集(分页大小例如每页 10 个项目)

【问题讨论】:

  • 您不能使用<p:column sortBy="#{myRow.mylabel}" 属性吗?只需将您的标签值填充到代表您的行的对象的字段中...
  • 感谢您的建议,我已经尝试过了。但是标签没有存储在数据库中,而这就是排序发生的地方(嗯,在生成的语句中)。所以重点是:数据库不知道用户看到的标签。但是用户想知道错误的排序行为
  • 所以把这个标签放到你的对象中,代表表中的行...,不是吗?
  • 这将不符合 JSF 的 I18N 国际化机制,并且属性值的标签不应在对象中硬编码,因为标签仅用于 GUI。如果您使用相同的会发生什么另一个 GUI 中的数据模型?
  • 您应该从 JSF 使用的属性文件转换服务器端的标签...使用 ResourceBundle.getBundle("some.package.resources.YourTexts",yourLocale)...

标签: jsf-2 primefaces jpa-2.0


【解决方案1】:

这里有一个延迟加载的例子:

您可以按照该链接中的方法编写自定义排序。

【讨论】:

  • 您是否可以将那篇文章中的一些代码复制到您的答案中?否则,如果链接消失,您的答案将在未来对其他人毫无用处。
【解决方案2】:

我相信不可能实现您的目标。

除非知道值是什么,否则您的数据库无法排序。您可以在从数据库加载后翻译标签和排序,但由于资源限制,您不希望在内存中排序。

最好的解决方案是在数据库中实施本地化解决方案。然后您的数据库可以查找每个标签的翻译并应用排序。我个人认为这是本地化任何应用程序时要走的路,因为它允许最终用户轻松翻译。您甚至可以编写进行数据库查找而不是引用文件系统包的 Java 资源包提供程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2013-01-14
    相关资源
    最近更新 更多