web-dev-qa-db-ja.com

「インクルード」ページがあるjspページの変数

タグを使用してページが追加されたjspページの変数のスコープ規則は何ですか?

私の理解では、インクルードされたページは基本的にページにコピーされているため、親jspで変数を宣言した場合、子jspで使用できると仮定することになります。

しかし、Eclipseはこれについて文句を言います(当然、ページを任意のページに含めるか、スタンドアロンとして使用できるためです。そして、Tomcatサーバーを起動しようとすると、起動に失敗します。

基本的に、親ページのセッションからいくつかの変数を取得し、それらを子ページで使用したいと思います。これは機能しません。

だから、各子ページのセッションからそれらを取得するというアイデアを思いつきましたが、同じ変数名をすべて与えることができるのか、それとも異なる変数名を選択する必要があるのか​​疑問に思っていました各ページが衝突しないようにします。

また、親jssにlog4netをインポートする場合、子jssにもlog4netをインポートする必要がありますか?

52
Omar Kooheji

JSPには、他のjspページを含める2つの方法があります。

<%@include file="include.jsp"%>

そして

<jsp:include page="include.jsp" />

前者を使用する場合、親JSPで宣言された変数はinclude.jspのスコープ内にあります(当然、Eclipseはこれをコンパイラーによってコピーされるため、推測どおりに表示されません)。

2番目のアプローチを使用する場合、インクルードは実行時に行われ、インクルードページには独自のスコープがあります。

インポートについても同様。インクルードページに重複してインポートしても安全です。

前者を使用している場合、JSPフラグメントを示すために.jspfを接尾辞として使用することを好みます。それから、フラグメントファイルでEclipseの警告をオフにすることができます。しかし、一般的に私はその方法の使用を避け、2番目のアプローチを好むようにします。

詳細については、次のドキュメントを参照してください: Include directive および JSP include

83
Kris

含めるページのパス内で変数を使用する場合は、次を使用します。

<% pageContext.include("/cities/" + (String) request.getAttribute("country_code") + ".jsp"); %>
7
Dagvadorj

オブジェクト指向の観点から、child.jspに含まれるparent.jspの変数のスコープに依存しないことをお勧めします。これは、jspにフラグメントを含めると、そのフラグメントをさまざまな場所で再利用する傾向があるためです。たとえば、child.jspがある場合、parent2.jspと同様にparent1.jspでも使用できます。この場合、変数の継承はしない方が良いです。

4
mR_fr0g

変数を作成するときは、スコープをセッションに設定する必要があります。そうしないと、含まれているページには表示されません。例:

<logic:iterate id="supportTmp" name="publicites" indexId="indexLots" scope="session">                                    
    <c:set var="support" value="${supportTmp}" scope="session"/>
    <c:choose>
    <c:when test="${publiciteMoniteur == true}">
    <jsp:include page="/jsp/bodies/suiviEnvoiPubliciteMoniteurLigne.jsp" />
    </c:when>
    <c:otherwise>
        <jsp:include page="/jsp/bodies/suiviEnvoiPubliciteDefautLigne.jsp" />
    </c:otherwise>
</c:choose>
</logic:iterate>
2