JSP ページを別の JSP ページにインクルードする場合、複数の HEAD / BODY セクションを回避するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1841274

  •  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 部品。

他のヒント

2 つをマージすることはできませんし、すべきではありません <html> お互いに書類。これにより、無効な出力が生成されます。の助けを借りて条件付きで CSS/JS を含める方が良いでしょう。 JSTL c:if または c:choose タグ。

基本的な例:

<head>
    <script type="text/javascript" src="global.js"></script>
    <c:if test="${isAdminPage}">
        <script type="text/javascript" src="admin.js"></script>
    </c:if>
</head>

サイトメッシュの外では、ほとんど運がありません。ただし、ページごとの設定が現実的ではないと思われる場合は、デザインを再検討します。アプリには何ページありますか?

条件付きオプションを拡張して、 meta.jsp (例)、これには、 Map それぞれの head 要素 (meta タグ、css href、script href) に対して、JSP の名前をその Map のキーとして使用します。それからあなたは電話します request.getRequestURI(), をクリックすると、そのキーの下にマップに配置したものがすべて表示されます。あまり美しい解決策ではありませんが、機能しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top