Подтвердить что ты не робот

Переменные на страницах jsp с включенными страницами

Каковы правила определения переменных на странице jsp со страницами, добавленными к ним с помощью тегов?

Мое понимание состоит в том, что включенная страница по существу скопирована на страницу, которая заставила бы меня предположить, что если я объявила переменную в родительском jsp, что она будет доступна в дочерних.

Однако Eclipse жалуется на это (понятно, потому что я могу по возможности включать страницы на любую страницу или использовать их как самостоятельные. И я пытаюсь запустить сервер tomcat, который он не запускает.

В основном я хочу получить пару переменных из его сеанса на родительской странице и использовать их на дочерних страницах. Это не работает.

Итак, я ударил его идею получить их из сеанса на каждой из дочерних страниц, однако мне было интересно, могу ли я дать им все те же имена переменных, или если мне придется выбирать разные имена переменных для них на каждой странице, чтобы они не столкнулись.

Также, что касается импорта, если я импортирую log4net в родительский jss, мне также нужно импортировать его в дочерние?

4b9b3361

Ответ 1

В JSP есть два способа включения других jsp-страниц.

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

и

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

Если вы используете первое, любая переменная, объявленная в родительском JSP, будет включена в include.jsp(конечно, Eclipse не увидит этого, как вы предполагали), поскольку он эффективно копируется компилятором.

Если вы используете второй подход, включение выполняется во время выполнения, а страница включения имеет свою собственную область.

То же самое для импорта. Хотя безопасно их избыточно импортировать на страницу включения.

Если я использую первый, я предпочитаю суффикс их с .jspf, чтобы обозначить фрагмент JSP. Я могу отключить некоторые предупреждения Eclipses в файлах фрагментов. Но в целом я стараюсь избегать использования этого метода и предпочитаю второй подход.

Более подробную информацию можно найти в документах: Включить директиву и JSP включает.

Ответ 2

С объектно-ориентированной точки зрения я бы рекомендовал не полагаться на область действия переменной в parent.jsp, которая включена в child.jsp. Это связано с тем, что когда я включаю фрагмент в jsp, я склонен захотеть повторно использовать этот фрагмент во многих разных местах. Например, если у меня есть child.jsp, я могу использовать его в parent1.jsp, а также parent2.jsp. В этом случае лучше не изменять наследование.

Ответ 3

Используйте следующее, если вы хотите использовать переменную в пути к странице, которая будет включена:

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

Ответ 4

Когда вы создаете переменную, вы должны установить область действия на сеанс, в противном случае включенная страница ее не увидит. Пример:

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