2009-06-03 9 views
44

jspページの変数の有効範囲規則は、タグを使用してページに追加されていますか?"included"ページを含むjspページの変数

私が理解していることは、インクルードされたページが基本的にページ内にコピーされていることです。これは、親JSPで変数を宣言しておけば、子ページで利用できると仮定します。

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

私は基本的にしたいです

私は彼がそれぞれの子ページのセッションからそれらを取得する考えを打ちました。しかし、私はそれらに同じ変数名を与えることができるかどうか、または各ページで異なる変数名を選択して衝突しないようにしなければならないかどうか疑問に思っていた。

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

+0

変数がセッション中の場合、問題はどこですか?そして、親ページのセッションではどういう意味ですか? –

+1

これらの変数は整数変数で、セッションから取得してIntegerにキャストしてから、それらの整数値を取得します。また無効をチェックする私はローカル変数を宣言するだけでそれをやらなければならないため、ある程度の苦痛を救うために努力していました。 –

答えて

75

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

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

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

あなたが元を使用する場合は、親JSPに宣言された変数がinclude.jspスコープになります(あなたが推測としての当然のEclipseがこれを表示されません)これはコンパイラーによって効率的にコピーされるからです。

2番目の方法を使用すると、実行時にインクルードが行われ、インクルードページには独自の有効範囲があります。

インポートのためです。インクルードページで重複してインポートすることは安全ですが、

前者を使用している場合は、JSPフラグメントを表すために.jspfを付けることをお勧めします。私は、断片ファイルでEclipses警告のいくつかをオフにすることができます。しかし、一般的に私はその方法の使用を避けようとしており、第2のアプローチを好む。

さらに詳しい情報は、Include directiveJSP includeのドキュメントにあります。

+3

+1のjspfアドバイス – Alfabravo

+0

私はこの例に夢中です。多分、Jasmperのコードには問題がありますか? * <%@ include ...> *フォームを使用します。私は、 'inclued' .JSPの内部のStringに書き込もうとすると、ランタイムJSPコンパイラエラーが発生します。私はおそらく、私は値を "後方に"渡すことが許されないことを受け入れることができます - なぜ@includeの記載されたルールに基づいて、エラー? – will

+1

<%と@の間のスペースはエラーの原因になるので、<%@include file = "include.jsp"%>を書き込まないでください。答えに示されているスペースがなければ、うまく動作します。 – CodeReaper

4

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

+8

あなたは代わりに何をしますか? – Brimstedt

4

あなたが含まれるページのパス内の変数を使用したい場合は、以下を使用します。

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

を変数を作成するとき、あなたは、それ以外の場合は、セッションに含まれるページをスコープを設定する必要がありますそれを見ることはできません。 例:

<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> 
関連する問題