質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

Q&A

1回答

3811閲覧

<ui:include>を利用した際の js 重複読み込みの防止

sab

総合スコア20

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

0グッド

0クリップ

投稿2019/02/24 03:21

編集2019/02/24 03:22

<質問>

<ui:include src="#{operations.fileName}"/> を update させた際、#{operations.fileName}内の html に記載された <script><link>を、無効化を含めた調整をする方法について、ご存知であればご教授下さい。

若しくは、調整を可能にする為の異なる方法のご教授でも構いませんが、JSF等<環境>での記載の中で実施可能である事が必須になります。

<環境>

a) GlassFish 3.1.2.2
b) PrimaFaces 4.0

一寸古いですが既存環境の為更新は不可です。
また、"1)"と"2)" は、本来サポートする JSFのバージョンが異なっていたかと思いますが、対処済みですので無視して下さい。

<<詳細>>
現在 HTML の構成は、下記のようになっています。
index.xhtml 内の一部を動的なコンテンツとし、それぞれ別のxhtmlファイルとして作成しています。

index.xhtml

1<h:body> 2.. 3<ui:include src="#{operations.fileName}"/> 4.. 5</h:body>``` 6 7 8”<ui:include..” の部分の更新は、例えば、"<p:menuitem ... update=.." のような形式で、メニュー操作をトリガーに動的に更新を行っています。つまり、XMLHttpRequest を行い、<partial-response> を受信し、<ui:include>の部分に動的に展開される事になります。 9 10<課題> 11----- 12index.xhtmlにも#{operations.fileName}のページにも<h:head>があり、それぞれ primefaces に関連した script や css が記載されています。 13ただ、<ui:include> の更新の度に異なる #{operations.fileName} (xhtml)を読み込んでおり、javascript の重複読み込みが原因で一部挙動がおかしくなります。 14 15{operations.fileName}側の <h:head>を無効化させる事は容易いですが、利用している primefaces のコンポーネントによって、記載される<script>や<link>の内容は若干異なってきますので、必ず全てを無効化してしまう訳にもいきません。 16 17全ての <h:head>を無効にし、RequireJS あたりを使って javascript を個別に読み込み管理をさせてしまう手もありますが、ページ毎に必要となる javascript やCSS を効率良く抽出する方法が不明です。あまり手作業に依存させると、今後、保守改修を実施する際にミスの元になります。 18 19 20今後の保守改修を踏まえ、重複読み込みの防止と作業ミスの防止を双方効率良く実現する為に、効率の良さそうな方法についてご教授頂けると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんにちは。
質問に関する回答にはなりませんが、代替案を記載します。

JSFでメニュー+コンテンツのページ構成としたい場合、template機能を使う方法が有ります。メニューとコンテンツのレイアウトを定義したtemplateを作成し、全てのコンテンツにtemplateを適用します。メニューのリンクによってページは切り替わりますが、同じtemplateを適用しているので利用者にはコンテンツ部分のみ切り替わって見える仕組みです。

【JSF】テンプレートを利用してみる

PrimeFacesを採用されているので、jsfの機能だけではレイアウトがうまくいかないかも知れません。対処としてp:layout、p:layoutunit等を利用する方法が有ります。

PrimeFacesを試してみる - p:layout
Layout - Element(showcase)

自分ではtemplateまでしか試したことが無く、深くは語れないのですがご参考までに。

投稿2019/02/24 04:59

BlueMoon

総合スコア1339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sab

2019/02/24 09:39

ご提案ありがとうございます。 "【JSF】テンプレートを利用してみる"での記載をさらっと確認しました。この場合、最初のページ読み込みで全体読み込み、表示部分の切替は style="display" の設定を動的に切り替える、と言う流れになるのかと思います。 正直最後はその手しか無いかとも考えてはいますが、ページが重くなりますので、出来れば避けたいと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問