0

背景 -私は、ビュー テクノロジとして JSP を使用する従来の JSF アプリケーションに取り組んでいます。JSF 2.2/2.3 に移行することを決定したため、JSP ページも facelets に変更しています。

問題 -次のテンプレートがあります - Layout.xhtml - 次のようなレイアウトが含まれています -

<ui:insert name="header"></ui:insert>
<ui:insert name="body"></ui:insert>
<ui:insert name="footer"></ui:insert>

以下はサンプルファイルです (index.xhtml など) -

<ui:composition template="/layout.xhtml">
   <ui:define name="header"><h1>Sample Header</h1></ui:define>
   <ui:define name="body"><ui:include src="/searchRecord.xhtml"></ui:define>
   <ui:define name="footer"><h3>Sample foorter</h3></ui:define>
</ui:compositio>

問題は - ヘッダーとフッターはすべてのページで同じですが、本文は異なります。つまり、最初にアプリケーションを起動すると、searchRecord ページが表示されます。ユーザーが情報を入力したら、データを表示する必要があります。このページで、ユーザーが exit を押した場合、本文には exit ページが含まれている必要があります。前を押すと、再び searchRecord ページが表示されます。

つまり、 dynamic を含める方法を探しています<ui:include>。それ以外の場合は、操作ごとに 3 ~ 4 個の xhtml ページを作成する必要があります。

リサーチ -

私はいくつかの質問をしました -

<ui:include> with dynamic src ... 完全な狂気

ダイナミック UI:インクルード

しかし、私の問題を解決するものは何もないようです。次のように使用すると-

<ui:fragment rendered="#{bean.searchRecord}>
  <ui:include src="/searchRecord.xhtml">
</ui:fragment>
<ui:fragment rendered="#{bean.showDetails}>
  <ui:include src="/showdetails.xhtml">
</ui:fragment>
<ui:fragment rendered="#{bean.exit}">
  <ui:include src="/exit.xhtml">
</ui:fragment>

まず、Bean が初期化されていないため、最初のページを起動するのに苦労しました。<f:event type="preRenderComponent">which を使用して Bean を初期化し、フラグを設定して、この問題を解決しようとしました。起動の問題が解決され、searchRecord ページが正しく表示されるようになりました。しかし、詳細の表示ボタンをクリックすると、同じページに残るか、(postback() メソッドを使用して) showDetails ページに移動すると、詳細は表示されません (つまり、showDetails Bean は呼び出されません)。

上記の動的レイアウトを実装する方法を教えてください。

4

0 に答える 0