2013-07-22 5 views
4

У меня есть родительский jsp a.jsp, который включает в себя другой jsp b.jsp. Я вычисляю некоторые значения в b.jsp, которые должны использоваться в родительском jsp a.jsp, который передаст это вычисленное значение другому jsp, скажем c.jsp. Как я могу оценить значение в дочернем jsp и передать его родительскому jsp до того, как эта страница полностью загрузится?Настройка родительских переменных jsp в дочернем jsp

ответ

2

Как вы в том числе "ребенок" банку внутри родителя? статический или динамический импорт?

, если у вас есть

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

изменить его

<jsp:include file="myFile.jsp" /> 

затем в родительском установить свойство в запросе (не в сессии, которая была бы «грязнее»):

<% request.setAttribute("attrName", myValue) %> 

Наконец, в разделе «ребенок» jsp:

<% myValue = (MyValueType)request.getAttribute("attrName") %> 
+0

Этот ответ кажется близким, но не совсем тем, что задал вопрос. Я смог сделать это вот так: В родительском JSP - request.setAttribute ("myAttrName", initialvalue); В дочернем JSP - request.setAttribute ("myAttrName", newvalue); Затем в родительском JSP после jsp: include из дочернего элемента, получите значение - String result = (String) request.getAttribute ("myAttrName"); – mikato

-1

У вас есть возможность проведения сеанса для этого.

(b.jsp)

session.setAttribute("value",value); 

(c.jsp)

session.getAttribute("value"); 

Однако я бы рекомендовал делать некоторые основные реструктуризации вместо этого. В вашем примере значение ваших данных зависит от порядка элементов на странице. Если вам когда-либо понадобится переустановка вещей (например, перемещение b.jsp включается после включения c.jsp), вы рискуете нарушить бизнес-логику.

Хороший шаблон для веб-разработки - модельный шаблон-контроллер. «Контроллер» определяет, какая страница должна отображаться, «модель» вычисляет все данные и делает их доступными, а «вид» отображает и форматирует.

Я бы рекомендовал Просматривая эту статью, которая может быть полезна для понимания того, почему MVC является ценным подход: http://www.javaranch.com/journal/200603/Journal200603.jsp#a5

Edit: Как и другие пользователи уже упоминали, область запроса будет чище, чем область сеанса. Тем не менее, я по-прежнему рекомендую сначала определить значение перед написанием любого содержимого дисплея.

+0

Было бы очень плохо, если бы использовать область сеанса для хранения данных, которые более чем вероятны переходные процессы, такие как информация о продукте/sku. Сеанс в ATG может зависеть в памяти в течение 15 или более минут. Область запроса - это путь! – bated

1

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

1

Вы можете установить переменные в запросе, в b.jsp, и используйте их в parent.jsp. Но вы можете использовать их только в родительском jsp после < jsp: include > тег. Помните, что все это оценивается на стороне сервера, поэтому, когда вы говорите «до того, как эта страница будет полностью загружена», вы можете быть уверены, что сервер оценил ее до того, как браузер ее загрузил. Если вы имеете в виду, что хотите отложить оценку на сервере до тех пор, пока не будет оценен какой-то код ниже, это не будет возможным. По крайней мере, не так.

b.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<c:set var="myVar" scope="request" value="Hello"/> 

parent.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<jsp:include page="b.jsp"></jsp:include> 

<span> 
    The value is ${requestScope.myVar}. 
</span>