0

JSF ページから一部を構成できるようにする必要がある Web アプリケーションがあります。たとえば、私のアプリケーションがいくつかの小さな部分に分割され、それぞれが以下のようなフォルダー/ファイル構造になっていると想像してください。

/partname
    /config
        config.xhtml
    /template
        generaltemplate.xhtml
    search.xhtml
    results.xhtml

Search.xhtml と results.xhtml はどちらもテンプレート ファイル generaltemplate.xhtml を使用します。この一般的なテンプレートには、config.xhtml の内容を含める必要があります。すべての共有構成をこのページに配置して、アプリケーションがアクセスできるようにする計画です。しかし、私はこれを行うのに問題があります。

config.xhtml で <c:set> を使用して変数を作成すると、その構成ページからしかアクセスできないようです。以前は、 <c:set> のスコープを request に変更するだけで、問題は解決されました。しかし、JSF は別の方法で動作するため、この場合のスコープは役に立たないことがわかっています。

この 1 つのページですべての構成を作成し、アプリケーション全体でアクセスできるようにする方法について、誰か提案はありますか?

このアプリは Seam を使用して作成されているため、Seam の何かを使用することもできます。

4

3 に答える 3

1

c:set の問題について、facelets を使用できると仮定します。

あなたのテンプレートで:

...
<html ...
    xmlns:ui="http://java.sun.com/jsf/facelets"
...
<body>
    <ui:param name="testParam" value="Test" />

    <ui:insert name="test">
    </ui:insert>
...

この場合、ui:param の値は、テンプレートを使用するページで使用される変数として使用できます。

テンプレートを使用するページ:

...
<html ...
    xmlns:ui="http://java.sun.com/jsf/facelets"
...
<body>
<ui:composition template="/WEB-INF/templates/template.xhtml">
    <ui:define name="test">
<h:outputText value="#{testParam}" />
...

そうは言っても、これを実際に使用する必要がある場合はごくわずかだと思います。あなたの手が縛られていない限り、値はアプリケーション/セッションスコープの Bean から取得する必要があります。

編集:

非常に忙しく、頭に浮かんだ最初の回答を使用したため、以前に再確認しなかったことをお詫びしますが、 ui:param の代わりに ac:set を使用しても、以前に定義されたセットアップを使用して同様に機能することを確認しました。したがって、テンプレートでは、代わりに . これは、xmlns:c="http://java.sun.com/jstl/core" も含める必要があることを意味します。これは既にお持ちだと思います。

于 2010-02-17T22:45:54.453 に答える
0

Seam はモデル ビュー コントローラー (MVC) フレームワークです。ビューは、JSF ページを使用して実装されます。構成はモデルの一部であり、ページに配置するべきではありません。

適切な階層化を実装するには、JSF ページで参照する何らかの種類のグローバルにアクセス可能な Bean (Seam によってインスタンス化され、おそらく .properties ファイルから取り込まれたもの) に構成を配置することをお勧めします。

于 2009-06-08T06:00:45.480 に答える