JSP ページを別の JSP ページにインクルードする場合、複数の HEAD / BODY セクションを回避するにはどうすればよいですか?
-
12-09-2019 - |
質問
JSP ページを別の JSP ページにインクルードしたいと考えています。私が持っているとしましょう master.jsp
それは含む slave.jsp
.
として slave.jsp
独自のを持っています <head>
JavaScript と CSS を扱うためのセクションですが、それらをマージする方法または別の方法はありますか master
そして slave
頭セクションを 1 つにまとめますか?また、同じことを行う必要があります 体のセクション。
私は使用してきました サイトメッシュ 最近ですが、各ページにテンプレートを設定するのはかなり非現実的だと思います。
解決
私は、を渡すことでこの解決策を選びました パラメータ ページを含める場合。
で マスター.jsp
<head>
blablabla
<c:import url="slave.jsp">
<c:param name="sectionName" value="HEAD" />
</c:import>
</head>
<body>
blablabla
<c:import url="slave.jsp">
</c:import>
</body>
そしてそして スレーブ.jsp パラメータが読み取られ、ページのカスタム部分がレンダリングされます。
<c:choose>
<c:when test="${param.sectionName == 'HEAD'}">
head section here [without the <HEAD> tags !]
</c:when>
<c:otherwise>
body section here [without the <BODY> tags !]
</c:otherwise>
</c:choose>
見るのはあまり良くありませんが、動作しています。このようにして、重複を削除することができます HEAD
そして BODY
部品。
他のヒント
サイトメッシュの外では、ほとんど運がありません。ただし、ページごとの設定が現実的ではないと思われる場合は、デザインを再検討します。アプリには何ページありますか?
条件付きオプションを拡張して、 meta.jsp
(例)、これには、 Map
それぞれの head 要素 (meta タグ、css href、script href) に対して、JSP の名前をその Map のキーとして使用します。それからあなたは電話します request.getRequestURI()
, をクリックすると、そのキーの下にマップに配置したものがすべて表示されます。あまり美しい解決策ではありませんが、機能しています。