【问题标题】:Primefaces Datatable filterOption in columns列中的 Primefaces 数据表过滤器选项
【发布时间】:2013-11-06 16:48:03
【问题描述】:

我有一个通过 Datatable (Primefaces 3.4.2) 显示的数据库表,我想在标题中显示一个组合过滤器,其中填充了数据库表本身的值。

1) 由于这些值不是 PK 或 FK,因此我构建了一个命名查询来检索 prefDep 列的不同值:

@NamedQuery(name = "Upb.findPrefDeps", query = "SELECT DISTINCT u FROM Upb u WHERE u.prefDep = :prefDep")

2) 在我的 AbstractController 中:

public List<T> getPrefDepsList() {
  if (prefDeps == null) {
    prefDeps = this.ejbFacade.findPrefDeps();
    }
      return prefDeps;
}

3) 当我注入外观 EJB 时,如何构建一个托管 bean 属性以在下面的 filterOption 中使用? managedBean:

@ManagedBean(name = "upbController")
@ViewScoped
public class UpbController extends AbstractController<Upb> implements Serializable {

@EJB
private UpbFacade ejbFacade;

public UpbController() {
    super(Upb.class);
}

@PostConstruct
public void init() {
    super.setFacade(ejbFacade);
}

public SelectItem[] getPrefDepOptions() {
    return prefDepOptions; //build/populate this
 } 
}

jsf:

<p:column filterBy="prefdep" headerText="PrefDep"
    filterOptions="#{upbController.prefDepOptions}"  
    filterMatchMode="exact">  
      <h:outputText value="#{item.prefDep}" />  
</p:column>  

提前致谢。

【问题讨论】:

    标签: jpa primefaces datatable ejb filtering


    【解决方案1】:

    我不知道我是否正确理解了您的问题。您想执行一次命名查询并将不同的值存储在托管 bean 的属性中吗?为此,您可以使用在渲染页面之前调用的 PreRenderView 事件。您可以调用 init 函数来使用此事件加载此类值。

    您也可以使用命名查询访问 getter,但这可能不止一次调用。

    【讨论】:

    • 为了更好地理解,请参阅primefaces.org/showcase/ui/datatableFiltering.jsf 正如您在示例的 tableBeans.java 中看到的,组合中加载的值是硬编码的。想象一个表格,其中这些组合选项值随时间变化。这是一个非常艰难的出路。好的,如果我现在清楚了,您对如何以非硬编码方式进行操作有任何想法吗?并且,您能否提供一个关于您的想法的示例(基于我的问题,如果可能的话)(使用命名查询访问 getter)?顺便说一句,我认为这是一个非常好的主意。谢谢。
    • 我会这样做:在 preRenderView 或 postAddToView 上创建一个事件(回发时不调用最后一个事件)并将命名查询中的值填充到私有成员中,以避免过于频繁地加载它们从数据库。然后你只需要在你的 bean 中创建一个类似 public List&lt;SelectItem&gt; getPrefDepOptions() 的方法(你也可以在这个列表中使用自己的对象!)将它们提供给 filterOptions 属性,如示例所示。如果您有静态对象或动态列表 - primefaces 不关心这一点。 SelectItems 应该包含标签和值 - 或者您使用自己的对象。
    • anm,你有任何关于这样做的实际例子(链接、书籍等)吗?谢谢。
    • 我有一个工作示例,我们在那里使用缓存的 SelectItems。但问题出在哪里?只需从 primefaces 页面上的展示中获取示例并更改 getter。您唯一必须做的就是返回一个(例如)SelectItems 的列表。您可以进行查询并将结果填充到 SelectItems 中,将它们放入 List 并返回它们!
    猜你喜欢
    • 2013-12-13
    • 2014-09-26
    • 2013-08-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2012-11-01
    • 2014-03-01
    相关资源
    最近更新 更多