У меня есть таблица базы данных, отображаемая через Datatable (Primefaces 3.4.2), и я хочу показать comboFilter в заголовке, заполненном значениями из самой таблицы базы данных.Primefaces Datatable filterOption в столбцах
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>
Спасибо заранее.
Для лучшего понимания см. Http://www.primefaces.org/showcase/ui/datatableFiltering.jsf. Как видно из примера tableBeans.java, значения, загруженные в комбо, жестко закодированы. Представьте таблицу, в которой значения комбо-значений меняются со временем. Это очень трудный выход. Хорошо. Если я сейчас понял, есть ли у вас какие-либо идеи о том, как сделать это с использованием не жесткого кодирования? И, пожалуйста, приведи пример (на основе моей проблемы здесь, если это возможно) о вашей идее (_access getter с именованным запросом_)? Кстати, я думаю, что это очень хорошая идея. Благодарю. – jMarcel
Я бы сделал это так: сделайте событие на preRenderView или postAddToView (последний не вызывается при обратной передаче) и заполните ваши значения из именованного запроса в частный член, чтобы не загружать их слишком часто из базы данных. Тогда вам просто нужно сделать способ, подобный 'public List getPrefDepOptions()' в вашем компоненте (вы также можете использовать собственные объекты в этом списке!), Чтобы дать им атрибут filterOptions, как показано в примере. Если у вас есть статические объекты или динамический список, то это не имеет значения. Элементы SelectItems должны содержать метку и значение - или вы используете свои собственные объекты. –
anm
anm, есть ли у вас практический пример (ссылка, книга, что угодно) об этом? Благодарю. – jMarcel