0

OpenBravo のようなものが既にある JSF(facelets)/Spring/ アプリケーションに複数タブ機能を追加しようとしています ( http://wiki.openbravo.com/w/images/9/9c/WIK_PartsOfScreen.pngが、アプリはさまざまなテクノロジーを使用しています - GUI 用の純粋な JavaScript だと思います): 各ドキュメントまたはレポートは、個別の JavaScript タブで開くことができます。

基本的には単純です。各ドキュメントまたはレポートは個別の JSF リージョンであり、そのうちの 1 つだけが表示されます。タブは単なる視覚効果です。

問題は、JSF バッキング Bean (または、この役割で使用されることがある Spring Bean) との通信です。これは、1 つのタブ インターフェイスの場合は単純です。次の Bean を作成できます。

class BankDocumentServiceBean {
    BankDocument selectedDocument;
    Long id;

    void setId(Long id) {
        if (selectedDocument.id!=id) {
            setupBankDocument(id);
        }
    }
    void setupBankDocument(Long id) {...}
    BankDocument getBankDocument() {...}
    ...
}

また、BankDocument JSF ページは次のようになります。

...
<f:metadata> <!-- page is called with parameter id and this code calls setId(...) -->
    <f:viewParam name="id" value="#{bankDocumentServiceBean.id}"/>  
</f:metadata>

<h:body>
...
    <!-- p for Primefaces -->
    <p:inputText id="amountTxt" 
        value="#{bankDocumentServiceBean.selectedDocument.amount}" 
        required="true" label="amountLbl"/>  
    <p:message for="amountTxt" />  
    ...

このアプローチは一般的に良いですか?

主な問題は、この単一ドキュメントのアプローチを複数のタブに拡張する方法です。JSF コードは動的にページに組み込むことができますが、サービス Bean が問題のままです。各呼び出しで追加のパラメーターを使用することで解決できます。たとえば、BankDocumentServiceBean には単一の BankDocument ではなく BankDocuments のリストを含めることができ、各操作 (getBankDocument など) には、コレクションから適切な Bean、つまり、関連する Bean を選択するための追加の識別子を含めることができます。ユーザーが操作するタブ。

しかし、もっと良いアプローチがあるかもしれません。たとえば、1 つのページが、古き良き単一ドキュメントの BankDocumentServiceBean の複数のインスタンスになる場合があります。タブに適した、より粗いスコープ (JSF スコープと Spring スコープ)、ある種の会話スコープがあるのではないでしょうか?

各タブは、個別の ID を持つ独自の一般パネル (div) に配置されています。おそらく、JSF/Spring アプリケーションは、リクエストが個別の panel/div から来ていることを検出し、それに応じて BankDocumentServiceBean のインスタンスを選択できますか?

私は推測します-リストとパラメーターを使用したソリューションは機能しますが、これにはより良いアーキテクチャがあるでしょうか? ありがとう!

4

1 に答える 1

2

完全なソリューションではありませんが、jsf Web アプリケーションで複数のブラウザー タブを処理するための良い出発点です。

  1. 複数のタブを扱う際の非常に良い読み物: http://myfaces.apache.org/orchestra/myfaces-orchestra-core/multiwindow.html

  2. これにはApache Codiスコープもお勧めします。

于 2013-05-02T08:18:59.323 に答える