Фильтр для нескольких открытых таблиц Faces - PullRequest
0 голосов
/ 15 июня 2011

У меня есть 3 openFaces <o:datatable /> s на одной странице просмотра (Overview.xhtml).

  • Первый отображает список всех музыкальных групп
  • 2d отображает список всех песен, написанных музыкальными группами
  • 3d отображает список всех шоу музыкальных групп

Я использую <o:inputTextFilter />, чтобы отфильтровать первый набор данных, используя идентификатор строки (

<h:form>
        <o:datatable value="#{bandBean.items}" var="band" ........<o:inputTextFilter 
        expression="#{band.id}" .../> 
</h:form>

<h:form>    
    <o:datatable value="#{showBean.items}" var="show" ........<o:inputTextFilter 
        expression="#{band.id}" .../> 
</h:form>
    <h:form>
    <o:datatable value="#{songBean.items}" var="song" ........<o:inputTextFilter 
        expression="#{band.id}" .../> 
</h:form>

Песни и шоу являются дочерними объектами музыкальных групп. Что мне действительно нужно, так это возможность фильтровать 3 таблицы данных, используя тот же inputTextFilter или что-то подобное, поскольку каждый из 3 таблиц данных имеет столбец с идентификатором полосы

Пользователь никогда не допустит трехкратного ввода идентификатора группы. время для таблицы BAND, второй раз для таблицы шоу и третий раз для таблицы песен, используя 3 фильтра. Вместо этого он хочет набрать один раз группу ID, и сразу 3 таблицы фильтруются.

Один из обходных путей - использовать три <o:inputTextFilter /> и установить их значения с помощью javascript или ajax: пока пользователь вводит что-то в фильтр, вводимое значение немедленно добавляется к другим фильтрам. Я не могу понять этот обходной путь. все же кажется странным отображать 3 фильтра, в то время как пользователь должен использовать только один. Любые идеи и помощь будут ценны!

1 Ответ

2 голосов
/ 24 июня 2011

Нет прямой поддержки для прикрепления фильтра к нескольким таблицам, однако вы можете смоделировать это поведение. Для этого вы можете прикрепить скрытый ("display: none") для каждой из ваших таблиц используя атрибут «for», и укажите значение фильтрации для всех их программно.

Вот простой фрагмент кода, который демонстрирует эту идею:

<o:inputText value="#{MyBean.filterText}"/> 
<o:commandButton value="Submit" action="#{MyBean.filterAllTables}"/> 
<o:inputTextFilter for="table1" expression="#{book.bookTitle}" 
                   value="#{MyBean.filterCriterion}" style="display: none"/> 
<o:inputTextFilter for="table2" expression="#{book.bookTitle}" 
                   value="#{MyBean.filterCriterion}" style="display: none"/> 
<o:dataTable id="table1" ...> 
<o:dataTable id="table2" ...> 

MyBean.java:

private String filterText; // a property w/ getter/setter 
private ExpressionFilterCriterion filterCriterion; // a property w/ getter/setter 

public void filterTables() { 
    String filterText = getFilterText(); 
    SimplePropertyLocatorFactory.SimplePropertyLocator propertyLocator =
                new SimplePropertyLocatorFactory.SimplePropertyLocator("id"); // "id" is a property name by which you'd like to filter
    ExpressionFilterCriterion filterCriterion = new ExpressionFilterCriterion(
                propertyLocator, FilterCondition.CONTAINS, filterText); 
    setFiterCriterion(filterCriterion); 
} 
...