2012-02-16 5 views
0

プライムフェイスフォーラムでthisを参照してください。
誰かが同じページで複数のデータテーブルを使用するにはどうしたら良いのですか?
私の問題は、プロパティにデータベースとは異なるテーブルのデータが含まれているビュースコープのBeanがあることです。私は各データベーステーブルのデータのための複数のデータテーブルを持っています。今私は<p:selectOneMenu>(赤い色で囲まれた)から選択された基礎値でデータテーブルを表示したいと思います。
このスクリーンショットはもう少し説明します。データテーブルのグループから正しいデータテーブルを表示する

image http://s19.postimage.org/qxugwevxf/image.jpg

+1

正しいデータテーブルは何ですか? jsfでは条件付きレンダリングが標準です。 –

+0

すみません。 JSFの新機能は、選択したデータテーブルの可視性を変更する方法を知らなかった理由です。 –

+0

ところで、私は私の質問を更新しました –

答えて

2

基本的なアプローチは、テーブルのrendered属性は、メニューの選択項目に依存できるようになります。

<p:selectOneMenu value="#{bean.table}"> 
    <f:selectItem itemValue="players" itemLabel="Players" /> 
    <f:selectItem itemValue="jobs" itemLabel="Jobs" /> 
    <f:selectItem itemValue="business" itemLabel="Business" /> 
    ... 
    <p:ajax update="tables" /> 
</p:selectOneMenu> 

<h:panelGroup id="tables"> 
    <p:dataTable value="#{bean.players}" rendered="#{bean.table == 'players'}"> 
     ... 
    </p:dataTable> 
    <p:dataTable value="#{bean.jobs}" rendered="#{bean.table == 'jobs'}"> 
     ... 
    </p:dataTable> 
    <p:dataTable value="#{bean.business}" rendered="#{bean.table == 'business'}"> 
     ... 
    </p:dataTable> 
    ... 
</h:panelGroup> 

これは実装が簡単ですが、(もちろん<ui:include>のファイルに分割することができます)ビュー内のコードの多くで終わります。より高度で再利用可能な方法は、単一のテーブルのvalueがメニューの選択された項目に依存するようにし、列を動的に生成するために<p:columns>を使用することです。以下のようなもので

<p:selectOneMenu value="#{bean.table}"> 
    <f:selectItems value="#{bean.tables}" /> 
    <p:ajax listener="#{bean.changeModel}" update="table" /> 
</p:selectOneMenu> 

<p:dataTable id="table" value="#{bean.model}" var="item"> 
    <p:columns value="#{bean.columns}" var="column"> 
     <h:outputText value="#{item[column]}" /> 
    </p:columns> 
</p:dataTable> 

:これは、あなたがより多くの専門的な列を追加したい時はいつでもあまりきめ細かく制御することができます

public void changeModel() { 
    model = populateModelBasedOn(table); 
    columns = populateColumnsBasedOn(table); 
} 

。代わりにタグファイルを使って作業することをお勧めします。

+0

あなたの返信ありがとうございます。私の実際の意図はあなたが言及したことすべてをすることでした。どのアプローチがより有益であるとお考えですか?タグファイル、複合コンポーネント、または選択した値に基づいたテーブルモデルの変更? –

+0

私の質問では、誰かが私に言ったprimefacesフォーラムで[投稿](http://forum.primefaces.org/viewtopic.php?f=3&t=18365&p=57049#p56921)を参照しました: "または、多くのデータテーブルを使用しますが、レンダリングされた="#{myBean.condition} "を使用して正しいデータテーブルのみを表示する=) ui:include + ui:paramsと混合すると、同じデータテーブルに対して1つのコードしかありません。 "どのように私はこれを達成することができます教えてください? –

0

神の恵みによって。多くの闘争の後!私はついに達成しましたthis
私は彼の専門家のヒントのためにBalusCに感謝のバンドルを支払う
私はすべてと私の解決策を共有したいと思います。

<p:selectOneMenu value="#{dbmBean.selectedTable}" style="height:27px" > 
    <c:forEach items="#{dbmBean.tableNames}" var="table"> 
     <f:selectItem itemLabel="#{table.value}" itemValue="#{table.key}"/> 
    </c:forEach> 
</p:selectOneMenu> 
<p:commandButton value="Go" action="#{dbmBean.goToTable}" ajax="false" /> 
... 
<p:dataTable binding="#{dbmBean.table}" var="row" rowIndexVar="index"> 
<f:facet name="header"/> 
<p:columns value="#{dbmBean.columns}" var="column" columnIndexVar="colIndex" > 
     <f:facet name="header"> 
      #{column.header} 
     </f:facet> 
     <h:outputText value="#{row[column.property]}"/> 
    </p:columns> 
</p:dataTable> 

とバッキングBeanで:私はこのスクリーンショットに望んでいたよう

public class DatabaseManagerBean implements Serializable { 
    private List<ColumnModel> columns; // Column model is a simple class with two string properties: header, property 
    ...  
    public void goToTable() { 
     int tableIndex = new Integer(this.selectedTable); 
     switch (tableIndex) { 
      case 1: 
       Players tempPlayers = new Players(); //the class which get data from a database table 
       this.players = tempPlayers.getAllPlayers(); 
       this.columnNames = tempPlayers.getColumnNames(); 
       for (String colName : columnNames) { 
        columns.add(new ColumnModel(colName.toUpperCase(), colName)); 
       } 
       table.setRendered(true); 
       table.setValue(this.players); 
       break; 
       ... 
       default: 
       table.setRendered(false); 
     } //end of switch statement 
    } //end of goToTable() method 
} //end of DatabaseManagerBean 

このコードスニペットは、正確に動作しますので、ここで
は、私は私のXHTMLファイルになかったものです! :-)

image http://s19.postimage.org/kt8xiy80z/image.png

しても、誰かが原因不明の左または不足している何かを見つける場合は、コメントを書いてください。
そしてもう一度BalusCに帽子をかける。彼のヒントがなければ、私はこの目的を達成できません。 :-)
オプティマスプライムとPrimeFacesチームに感謝したいと思います。 :-)
私は、Stackoverflowチームにも感謝します。私たちは、このような議論のためにすばらしいプラットフォームを提供してくれました。 :-)
ありがとうございます! :-)

関連する問題