2010-11-30 7 views
10

私はtaglibの宣言(uriなど)をすべて共通のヘッダファイルに入れることを考えていました。 JSP。最初は、物事はうまく見えましたが、実際のtaglibを単純なEL構文と同じくらい使っていません。しかし、私は、タグライブラリが明示的に宣言されているものを除いて、すべてのjspファイルに問題があります。他のjsp(ヘッダファイルを含む)はすべて<c:something.../>タグをHTMLのように扱い、評価しません。私はいくつかのグーグルを行い、私がやろうとしていることができることを示唆するthis post on O'Reillyを見つけましたが、私は明らかに何か間違っています。さらに、ヘッダファイル内の他のもの(共通のページヘッダ、ページタイトルなど)はすべて上手く表示されます。ヘッダーファイルとインクルードのサンプルは次のとおりです。共通ヘッダで宣言されたときにJSTL taglibsが認識されない

ヘッダファイル:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ page session="false" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 

包含文:

<jsp:include page="/WEB-INF/jsp/include/header.jsp"> 
    <jsp:param name="title" value="Home" /> 
</jsp:include> 

答えて

21

これは正常な動作です。

<jsp:include>を使用すると、別の要求でターゲットが実行され、その出力が含まれるJSPに出力が含まれます。含まれているターゲットのソースは含まれていません。の出力が含まれています。ターゲット出力が生成される手段は失われます。これはあなたのページにheader.jspのリテラルテキストを傾けます

<%@ include file="/WEB-INF/jsp/include/header.jsp" %> 

はあなたが何をしようとして行うには、 <% include %>ディレクティブを使用する必要があります。もちろん、これを行うことで、パラメータを渡すことができなくなるため、ページコンテキスト属性として設定する必要があります(例えば、 <c:set>を使用して...)。しかし、完了するまで <c:set>を使用することはできませんあなたのインクルード...)。

本質的に、面倒なことではありません。 Taglib宣言は厄介な定型文ですが、取り除くのは難しいです。

+0

ああ、それは恐ろしい鶏卵問題ではない。私はそれを行う最良の方法は、2つのインクルードに分けることです、ページに入り、 '<%@ include ...'構文を使用するものと ''構文? –

+0

@Chris:あなたは2つのインクルードに分けることができます。おそらく...タグヘッダーには '<%@ include%> 'を使用し、もう1つはHTMLヘッダーに' 'を使用します... – skaffman

+0

ただ私のコメントを編集しました。同じ考えがあるかのように思えます:-)ありがとう! –

関連する問題