0

「ヘッダー」と「コンテンツ」で構成されるページを作成したい。common.xhtmlを作成します

<ui:insert name="header">
    <ui:include src="commonHeader.xhtml" />
</ui:insert>
<ui:insert name="content">
    <ui:include src="commonContent.xhtml" />
</ui:insert>

次に、2つのページ(create_user_page.xhtmlとsearch_page.xhtml)を作成します。これらのページには、同じ「ヘッダー」が必要ですが、「コンテンツ」が異なります。

    <ui:composition  template="common.xhtml">
      <ui:define name="content">
                    <h1>Content for creating...</h1>
                    <ui:include src="create.xhtml"/>
      </ui:define>
    </ui:composition>

    <ui:composition template="common.xhtml">
      <ui:define name="content">
                    <h1>Content searching...</h1>
                    <ui:include src="search.xhtml"/>
      </ui:define>
    </ui:composition>

私のweb_flow.xmlには

<view-state id="start_page" view="administrator/main_page.xhtml">
    <transition on="create_user" to="create_user_page" />
    <transition on="find_user" to="search_page" />
    <transition on="back" to="back" />
</view-state>

<view-state id="create_user_page" view="administrator/create_user_page.xhtml">
    <transition on="create_user" to="create_user_page" />
    <transition on="find_user" to="search_page" />
</view-state>

<view-state id="search_page" view="administrator/search_page.xhtml">
    <transition on="create_user" to="create_user_page" />
    <transition on="find_user" to="search_page" />
</view-state>

main_page.xhtmlには、ページcreate_user_page.xhtmlとsearch_page.xhtmlにつながる2つのアクション「create_user」と「find_user」(「ヘッダー」内)があります。それらは類似した「ヘッダー」を持ち、「内容」が異なります。これはすべてうまくいきますが、いくつか質問があります。

1)create_user_page.xhtmlまたはsearch_page.xhtmlにアクセスするたびに「ヘッダー」が再レンダリングされるようですが、間違っていますか?「ヘッダー」が再レンダリングされずに残り、「コンテンツ」に対してのみ変更が行われる可能性はありますか。

2)Webフローxmlで、コードを複製する必要があります

<transition on="create_user" to="create_user_page" />
<transition on="find_user" to="search_page" />

「create_user_page」および「search_page」の場合。これらのアクションは、これら2つのページで同じ「ヘッダー」で行われることを念頭に置いて、書き直す方法はありますか。

4

1 に答える 1

0

JSF テンプレートは常にヘッダー/フッターを再レンダリングします。個人的には、本当にパフォーマンスを重視するものがない限り、問題はないと思います。次の方法で再レンダリングを回避できます。

  1. HTML フレームの使用http://www.w3schools.com/tags/tag_frameset.asp
  2. 部分レンダリング - SWF フロー ( http://static.springsource.org/spring-webflow/docs/2.0.x/reference/htmlsingle/spring-webflow-reference.html#view-transitionsのタグを参照) またはPrimeFaces 部分レンダリングのようなもの

いずれかのアプローチを使用する場合は、おそらく XHTML とフローを再設計する必要があります。事実上、部分レンダリングがフロー定義を置き換えます。何かのようなもの:

 <h:commandLink value="go to search page" actionListener="#{myBean.goToSearchPage}" update="content"></h:commandLink>
 <h:commandLink value="go to another page" actionListener="#{myBean.goToAnotherPage}" update="content"></h:commandLink>

<h:panelGroup id="content">
 <h:panelGroup id="search-page" rendered="#{myBean.isThisSearchPage}">
   <!-- search page contents here -->
 </h:panelGroup>
 <h:panelGroup id="another-page" rendered="#{myBean.isThisAnotherPage}">
   <!-- another page contents here -->
 </h:panelGroup>
</h:panelGroup>

上記のアプローチは、保守性がはるかに低く、推奨されません。代わりに標準の SWF を使用し、ビューが変更されるたびにヘッダー/フッターを再レンダリングします。ページ全体を再レンダリングせずに、SWF ビュー内で部分レンダリングを使用して、ユーザーの入力に応答することもできます。

2 番目の質問について: グローバル トランジションとフロー継承を使用できます。myflow.xml に globaltransitions.xml をインポートする方法を参照してください。

于 2013-02-18T18:19:34.683 に答える