8

私は JSF と PrimeFaces にかなり慣れていないので、複数のメニューを含むフル ページ レイアウトを開発する際にいくつかの問題があります。

問題#1

次のように、PrimeFaces 3.3 を使用して、左側にネストされたレイアウト ユニットを持つフル ページ レイアウトがあります。

<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop">
            <p:layout>                                          
                <p:layoutUnit id="inner_center" position="center">                        
                   <h:form id="formMainMenu">
                        <ui:include src="#{menuBean.pageToDisplay}.xhtml" />
                   </h:form>               
                </p:layoutUnit>
                <p:layoutUnit id="inner_south" size="200" position="south">                                       
                    <h:form id="formStartMenu">
                        <p:menu>
                            <p:submenu label="Start Menu">                                    
                                <p:menuitem value="Start" actionListener="#{#menuBean.setPageToDisplay('template/menu/start')}" update=":inner_center" />                                    
                            </p:submenu>
                        </p:menu>
                    </h:form>
                </p:layoutUnit>
            </p:layout>
        </p:layoutUnit>

バッキング Bean は次のとおりです。

@ManagedBean(name = "menuBean")
@SessionScoped
public class menuBean implements Serializable {

private String pageToDisplay = "template/menu/main";

public String getPageToDisplay() {
    return this.pageToDisplay;
}

public void setPageToDisplay(String pageToDisplay) {
    this.pageToDisplay = pageToDisplay; 
} }

menuItem をクリックすると、LayoutUnit (inner_center) 全体が消えます。Forms コントロールと Panel コントロールを Ajax と組み合わせて多数試しましたが、2 番目のページとメニューをロードできません。JSF に関する知識が限られているため、私のアプローチが間違っている可能性があります。私はこれが単純なものであることを望んでおり、それが欠けているだけです。

menuItem アクションから、別の PrimeFaces メニュー Bean を inner_center レイアウト ユニットにロードしたいのですが、これを行う必要はなく、Ajax 経由でメニューを呼び出すだけでよいでしょうか?

問題 2 これらの入れ子になったレイアウト ユニットでは、ページが読み込まれると、親の LayoutUnit ヘッダー「サービス」が完全に消えます。

<p:layoutUnit id="west" position="west" header="Services" resizable="true" closable="true" collapsible="true" effect="drop">

全体的なアプローチに関するヘルプやアドバイスは大歓迎です!!

ありがとう!

4

1 に答える 1

2

この質問は人気があるように思われるので、少なくとも、他の多数のStack Overflow Q&A、私自身の実験、JSF標準、 BalusC、および他の無数の人々やブログに基づいて、アプリケーション設計全体を処理するために私たちが思いついたソリューションを共有する必要があると感じています学習曲線に貢献している。

バックグラウンド -

私たちのアプリケーションは、UIと任意の数のライセンスモジュールが付属するエンタープライズレベルのサービス管理ソリューションです。OSGIやその他の重いアプリケーションフレームワークを確認しましたが、構成ファイルとデータベース設定を介した軽量の.jar管理を備えたEnterpriseMavenプロジェクトを決定しました。mySQLに基づくエンティティオブジェクトを使用し、オブジェクトのみをUIに返します。

解決 -

最初のリリースでは、次のレイアウトに基づいてJSFテンプレートWebサイトを作成しました: http ://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/

アイデアは、UIを次のように完全に動的にすることです。

  1. JSFコアアプリケーションの設計

    • データ駆動型JavaEEEnterpriseMavenアプリケーション
    • 主にAjaxを介した単一ページの処理
    • セキュリティPhaseListener(グローバルAjaxの問題に役立ちます)
    • エラー処理Phaselistener(グローバルAjaxの問題に役立ちます)
  2. 安全

    • Glassfishではレルムベースのセキュリティを使用しています。JSF 2.2を使用すると、ディレクトリ、コントロール、ページ、詳細なロール管理のメソッドに簡単に注釈を付けることができます。
  3. ナビゲーション

    • Realmのユーザーロールに基づいてXML構成から動的に構築されます。

    • 動的ナビゲーションとフォームはすべて、必要に応じてスコープ付きBeanを介して管理されます。このリンクには、遭遇する実際の問題に対する非常に多くの良い答えが含まれています:http: //balusc.blogspot.com/2011/09/communication-in-jsf-20.html

  4. テンプレートのコンテンツとコントロール

    • コンテンツは、エンティティによって入力されたオブジェクトを介して配信されます。すべてのデータの大部分はデータベースから取得されます。基本アプリケーションの初期化のみが、ローカル構成ファイルを介して行われます。

    • コントロールの生成は、UIを介して管理する必要のあるオブジェクトデータのxmlプロパティファイルを介して行われます。

ご存知のように、うさぎの穴にはたくさんのトンネルがあります。私たちのアプリケーションデザインにあなたに似た部分があり、より多くの情報やコードサンプルが必要な場合は、遠慮なく質問してください。他の人が学び続けるために、このスレッドに投稿します。

于 2012-11-26T18:52:54.437 に答える