Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с формированием страницы 
:(
    Опции темы
fath_fast
Дата 29.7.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



Суть обстоит в следующем:
Есть страница с определённым дизайном и вёрсткой с помощью
Код

<jsp:include page="${content}"/>

в эту страницу я подключаю любую другую странциу с нужным мне контентом. Загвоздка в том, что каждая страница ${content} содержит свой title, который в итоге должен быть заключён между тэгами <title> на основной странице....
Само содержание title я могу получить только когда уже начианет загружаться подключаемая страница, а главная уже загрузилась, и поэтому не срабатывает этот приём:
 
в основной странице прописываю:
Код

 <title>
    <%=getServletContext().getAttribute("tit")%>
</title>


а в сервелетах подлючаемых страницах прописываю:
Код

  getServletContext().setAttribute("tit", g.getTitle());

потому как сначала отображается title, а потом уже идёт запрос к подключаемым сревлетам...
Подскажите, что делать?
PM MAIL   Вверх
mbasil
Дата 29.7.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



1. Поместите в файл или базу Map <название_страницы,заголовок>
2. В прослушивателе приложения читайте в атрибут контекста сервлетов
3. В основной странице поиск из Map по названию 
<jsp:include page=”${content}”>
  <jsp:param name=”subTitle” value=”...” />
</jsp:include>
4. На вложенной странице соответственно вывод subTitle

P.S. То есть, я хотел сказать - попытка получить информацию из вызываемого сервлета в вызывающий до осуществления собственно вызова, скорее всего будет неудачной - лучше сделать наоборот. 

Это сообщение отредактировал(а) mbasil - 29.7.2008, 11:38
PM MAIL   Вверх
ivg
Дата 29.7.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Как насчёт того, чтобы определять значение title в том месте кода, где определяется значение ${content}?
PM MAIL   Вверх
Stampede
Дата 29.7.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



fath_fast, вы наступили на классические грабли использования JSP в качестве шаблонного механизма.

Тут проблема даже не столько в том, что подключать вложенные блоки через jsp:include выходит несколько, э... неуклюже, сколько в попытке возложить функции дирижирования на принимающую страницу JSP, которая для этого совсем не предназначена.

Решение на самом деле заключается в использовании паттерна MVC, когда запрос принимает сервлет-контроллер, вытягивает какую нужно инфу и складывает ее в заранее оговоренное место (например, в атрибуты запроса), а затем передает управление соответствующей странице JSP. Тогда к моменту вывода title значение заголовка будет уже известно и доступно, скажем, через request.getAttribute("title").

На первых порах можно всю эту логику поместить и в JSP - но только для проверки работоспособности идеи. В реале этот код очень быстро разрастется, и в отсутствие развитых средств ООП станет просто неуправляемым. Вот тогда сама собой придет мысль о структурировании всего этого хозяйства в виде сервлетов и прочих вспомогательных классов.

А вообще настоятельно рекомендую проштудировать тему JSP - с чего начать? - сэкономит массу времени и убережет от множества подводных граблей smile

Это сообщение отредактировал(а) Stampede - 29.7.2008, 19:39


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
fath_fast
Дата 30.7.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



ivg, 
Цитата

Как насчёт того, чтобы определять значение title в том месте кода, где определяется значение ${content}?

Но ведь title надо поместить  в тегах <head></head>, а во время формирования этих тэгов в title будет null...


 

Stampede, дело в том, что JSP я использую как представления для Spring-a,.. есть главная страница - ей я через её контроллер передаю аттрибуты (mv.addObject("content", "/add.htm")) - наименование страниц. Наименования отображены в dispatcher-servlet.xml, к примеру:
Код

   <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/index.htm">indexControl</prop>
                <prop key="/add.htm">add_formControl
                </prop>
               .....
            </props>
        </property>
    </bean>

Эти то страницы я и подключаю к главной с помощью инклудов.... 
Код

<jsp:include page="${content}"/>

В том то и трабл  smile , что сначала вызывается контроллер главной страницы формиррую отдельно шапку и проч детали, а потом уже вызываются контроллы подключаемых страниц...
Что скажешь, серьёзно намудрил smile?

PM MAIL   Вверх
ivg
Дата 31.7.2008, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Можно пойти другим путём.
includes.jsp:
Код

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

header.jsp:
Код

<html>
    <head>
        <title>My Application::${subtitle}</title>
    </head>
    <body>

footer.jsp:
Код

    </body>
</html>

add.jsp:
Код

<%@ include file="includes.jsp" %>
<c:set var="subtitle" value="Add something. It's working!!!" />
<%@ include file="header.jsp" %>
<!-- Page Content -->
<%@ include file="footer.jsp" %>

Надеюсь мысль ясна. Правда при этом придётся переделать навигацию: Все ссылки, которые указывают на главную страницу с подключаемой "/add.htm" переделать на точно "/add.htm". То есть контроллер add_formControl будет вызван до начала рендеринга страницы - чего и добивались smile  Ну и аналогично с другими.
Ещё если у вас в контроллере главной страницы, кроме mv.addObject("content", "/add.htm") ещё какие то действия выполняются, то это можно прикрутить в помощью HandlerInterceptor так, что они будут выполняться для каждой такой "субстраницы".

Это сообщение отредактировал(а) ivg - 2.8.2008, 10:40
PM MAIL   Вверх
fath_fast
Дата 1.8.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



 ivg, это значит, что в каждых представленяих подстраниц, нужно прописывать инклуды шапки и низа?
PM MAIL   Вверх
ivg
Дата 1.8.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Ну да. Это один из вариантов. Ещё можно в контроллере главной страницы, когда уже определена субстраница, т. е. примерно в том месте где вы делаете mv.addObject("content", "/add.htm") просто вызывать код контроллера этой субстраницы. Короче суть в том что все контроллеры должны отработать до начала рендеринга. Тут можно посмотреть на MultiActionController например.
PM MAIL   Вверх
fath_fast
Дата 1.8.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



ivg, спасибо за ссылку - посмотрел:
Что касается этого самого MultiActionControllera, насколько я понял из приведённого здесь примера http://forum.springframework.org/showthread.php?p=169177:
 один класс наследованный от MultiActionController может отвечать за множество протых контроллов страниц- это полюс, но  ещё непонятен один момент, а если субстраницы - это сложные формы, чьи контроллы унаследованы от SimpleFormController.... Разве этот класс с подобным справиться? 
а что-нибудь вроде MultiActionFormController -a я не нашёл :(
PM MAIL   Вверх
ivg
Дата 2.8.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Ну что ж, в таком случае вариант с <%@ include file="header.jsp" %> и <%@ include file="footer.jsp" %>, мне кажется, лучше подходит.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.