54 votes

Les Variables dans les pages jsp avec "inclus" pages

Quelles sont les règles de portée de variables dans une page jsp avec les pages ajoutées à l'aide de balises?

Ma compréhension est qu'une page est essentiellement copié verbatum dans la page, ce qui m'a conduit à supposer que si j'ai déclaré une variable dans un Parent jsp qu'il serait disponible dans l'enfant une.

Cependant Eclipse s'en plaint (à juste titre parce que je pourrait éventuellement inclure les pages de n'importe quelle page ou de les utiliser en tant que stand alone. Et j'ai deja essayer de démarrer le serveur tomcat, il ne parvient pas à démarrer.

En gros, je veux obtenir un couple de variables fromt il session dans la page parent et de les utiliser dans les pages enfant. Cela ne fonctionne pas.

Alors j'ai frappé ont-il à l'idée de les obtenir à partir de la session dans chacune des pages enfant, mais je me demandais si je pouvais leur donner à tous les mêmes noms de variables, ou si j'avais à choisir d'autres noms de variables dans chaque page de sorte qu'ils n'ont pas de choc.

Aussi ce sur les importations si je l'importation log4net dans le parent de la jss dois-je aussi avoir à l'importer dans l'enfant sont-elles?

88voto

Kris Points 8813

En JSP il y a deux façons d'inclure d'autres pages jsp.

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

et

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

Si vous utilisez l'ancien, puis toute variable déclarée sur le parent de JSP sera portée dans l'include.jsp (bien sûr, Eclipse ne pas voir cela comme vous l'avez deviné), car il est effectivement copié par le compilateur.

Si vous utilisez la deuxième approche, l'inclusion est effectuée au moment de l'exécution et de la page a son propre champ.

Idem pour les importations. Bien qu'il est sûr d'assurer la redondance de les importer dans la page.

Si je suis en utilisant l'ancienne, je préfère suffixe avec .jspf pour signifier une JSP fragment. Je peut désactiver certaines Éclipses avertissement dans le fragment de fichiers. Mais en général, j'essaie d'éviter d'utiliser cette méthode et préfère la deuxième approche.

Plus d'informations peuvent être trouvées dans la documentation ici: directive include et JSP inclure.

7voto

Dagvadorj Points 74

L'utilisation de la suite, si vous souhaitez utiliser la variable dans le chemin de la page à inclure:

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

4voto

mR_fr0g Points 3534

À partir d'un objet-orienté point de vue, je vous recommande de ne pas s'appuyer sur la portée de la variable dans le parent.jsp être inclus dans l'enfant.jsp. C'est parce que quand j'ai inclure un fragment dans une page jsp, j'ai tendance à vouloir réutiliser ce fragment dans de nombreux endroits différents. Par exemple si j'ai un enfant.jsp je souhaiterez peut-être utiliser dans parent1.jsp ainsi que parent2.jsp. Dans le cas où il est préférable de ne pas variable de l'héritage.

2voto

Marouane Points 1653

Lorsque vous créez une variable, vous devez définir le champ d'application de session, sinon, inclus la page ne sera pas le voir. Exemple :

<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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X