0

同じビュー ページ (overview.xhtml) に3 つのopenFacesがあります。 <o:datatable />

  • 最初はすべての音楽バンドのリストを表示します
  • 2d は、音楽バンドによって書かれたすべての曲のリストを表示します
  • 3D には、音楽バンドが提供するすべてのショーのリストが表示されます

<o:inputTextFilter />行IDを使用して最初のデータテーブルをフィルタリングするために使用しています(

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

曲とショーは音楽バンドの子オブジェクトです。私が本当に必要としているのは、同じinputTextFilterまたは同様のものを使用して3つのデータテーブルをフィルタリングする機能です。3つのデータテーブルにはそれぞれバンドIDを持つ列があるためです。

ユーザーは、3 つのフィルターを使用して、バンド ID を 3 回入力することを受け入れません。1 回目は BAND テーブル、2 回目は show テーブル、3 回目は song テーブルです。代わりに、バンド ID を 1 回入力すると、すぐに 3 つのテーブルがフィルター処理されます。

1 つの回避策は、3 つを使用<o:inputTextFilter />し、javascript または ajax を使用してそれらの値を設定することです。ユーザーがフィルターに何かを入力すると、入力された値がすぐに他のフィルターに追加されます。私はその回避策を理解できません。それでも、ユーザーが 1 つのみを使用する必要があるのに、3 つのフィルターを表示するのは奇妙に思えます。どんなアイデアや助けも貴重です!

4

1 に答える 1

2

フィルターを複数のテーブルにアタッチすることは直接サポートされていませんが、この動作をシミュレートすることはできます。これを行うには、「for」属性を使用して各テーブルに非表示 (「display: none」) をアタッチし、すべてのテーブルのフィルタリング値をプログラムで指定できます。

このアイデアを示す簡単なコード スニペットを次に示します。

<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); 
} 
于 2011-06-24T19:39:34.550 に答える