0

環境: JSF 2.0 / JPA (EclipseLink提供) / Glassfish 3.1 / java-EE-5 /

  • 小さな JSF (Spring なし、EJB なし、CDI なし) Web アプリケーションは、主にエンティティのデータテーブルを表示することで構成されていますが、目的は、特定のライターのエンティティ iem のリストを表示することです。

  • データテーブル ( <h:datatable/>) はライターのリストを表示します。

  • データテーブル ( <h:datatable/>) には、作家によって書かれた書籍のリストが表示されます。(1--*)
  • データテーブル ( <h:datatable/>) は、ライターに与えられた評価のリストを表示します。(1--*)
  • データテーブル ( <h:datatable/>) には、Writers によって処理されたトピックのリストが表示されます。(1--*)。

これは私が物事を見ている方法です:

すべてのデータテーブルには、Writer ID (Writer の主キー) を持つ列があるためです。ユーザーが特定のライター (できればライター データテーブルから) を選択し、それを使用して、選択したライター行に関連するレコードのみを表示するときに、現在のユーザー セッションにパラメーター (ライター ID) を保持するように指示するにはどうすればよいですか。

同様に、ユーザーが選択したライターを使い終わったら、セッションをリセットして別のライター ID を保持し、新しく選択したライターの子アイテムを楽しく探索できます。

言い換えると<h:datatables />、および<f:param />(または同様のもの) を使用して、選択した作家の書籍、評価、およびトピックの項目を永続的に一覧表示するにはどうすればよいでしょうか。

EG: 私にとって永続的とは = ユーザーがデータテーブルから作家を選択し、/book/List.xhtmlページに移動するとき、本のデータテーブルには、選択した作家が持っている本のアイテムのみをリストする必要があります。また、ユーザーが別の場所に移動すると、同じライターに関連するものしか表示されません。

OpenFaces のデータテーブル フィルターを使用することも 1 つのアイデアですが、エンド ユーザーがページに移動するたびにテーブルをフィルター処理するのは、あまりにも残酷です。彼はそれを一度だけしなければなりません。(エキサイティングな解決策は、データテーブルごとにOpenFacesフィルター ( ) を追加することです (この場合)。その後、すべてのテーブルのすべてのフィルターが、JSF サイクル中にユーザーセッションによってパラメーターとして保持されるライター ID を自動的に取得します。しかし、それは本当に実行可能ですか? :( ?<o:inputTextFilter /><o:datatable >

冗長で申し訳ありません。誰かがヒント、アイデア、解決策、またはより良い代替案を手伝ってくれることを願っています. よろしく。

4

1 に答える 1

1

実際に Java EE 5 ではなく Java EE 6 を実行していると仮定すると、現在選択されているライターをメソッド引数としてデータテーブルのコマンドリンク/ボタンの Bean に渡し、他のテーブルをそれに依存させることができます。

次のWriterエンティティがあるとします。

public class Writer {

    private String name;
    private List<Book> books;
    private List<Evaluation> evaluations;
    private List<Topic> topics;

    // ...
}

および次のマネージド Bean:

@ManagedBean
@ViewScoped // request or session are also okay.
public class Bean {

    private List<Writer> writers; // +getter
    private Writer writer; // +getter +setter

    // ...
}

次に、次のようにデータテーブルをセットアップできます(単一のビューで):

<h:form>
    <h:dataTable value="#{bean.writers}" var="writer">
        <h:column>#{writer.name}</h:column>
        <h:column>
            <h:commandButton value="View" action="#{bean.setWriter(writer)}">
                <f:ajax render=":details" />
            </h:commandButton>
        </h:column>
    </h:dataTable>
</h:form>
<h:panelGroup id="details">
    <ui:fragment rendered="#{not empty bean.writer}">
        <h:dataTable value="#{bean.writer.books}" var="book">
            <h:column>#{book.name}</h:column>
            ...
        </h:dataTable>
        <h:dataTable value="#{bean.writer.evaluations}" var="evaluation">
            <h:column>#{evaluation.name}</h:column>
            ...
        </h:dataTable>
        <h:dataTable value="#{bean.writer.topics}" var="topic">
            <h:column>#{topic.name}</h:column>
            ...
        </h:dataTable>
    </ui:fragment>
</h:panelGroup>
于 2011-06-23T21:33:28.757 に答える