0

我有一个通过 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)在我的抽象控制器中:

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

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

@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>  

提前致谢。

4

1 回答 1

0

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

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

于 2013-11-07T00:15:58.117 回答