Primefaces数据表filterOption列

时间:2013-11-06 16:48:03

标签: jpa primefaces datatable ejb filtering

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

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)当我注入Facade 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>  

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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