我有一个通过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>
提前致谢。
答案 0 :(得分:0)
我不知道我是否以正确的方式理解你的问题。您希望执行一次命名查询并将不同的值存储在托管bean的属性中?为此,您可以使用在呈现页面之前调用的PreRenderView事件。您可以使用此事件调用init函数来加载此类值。
您也可以使用命名查询访问getter,但这不仅可以调用一次。