![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| fath_fast |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
Суть обстоит в следующем:
Есть страница с определённым дизайном и вёрсткой с помощью
в эту страницу я подключаю любую другую странциу с нужным мне контентом. Загвоздка в том, что каждая страница ${content} содержит свой title, который в итоге должен быть заключён между тэгами <title> на основной странице.... Само содержание title я могу получить только когда уже начианет загружаться подключаемая страница, а главная уже загрузилась, и поэтому не срабатывает этот приём: в основной странице прописываю:
а в сервелетах подлючаемых страницах прописываю:
потому как сначала отображается title, а потом уже идёт запрос к подключаемым сревлетам... Подскажите, что делать? |
||||||
|
|||||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Как насчёт того, чтобы определять значение title в том месте кода, где определяется значение ${content}?
|
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
fath_fast, вы наступили на классические грабли использования JSP в качестве шаблонного механизма.
Тут проблема даже не столько в том, что подключать вложенные блоки через jsp:include выходит несколько, э... неуклюже, сколько в попытке возложить функции дирижирования на принимающую страницу JSP, которая для этого совсем не предназначена. Решение на самом деле заключается в использовании паттерна MVC, когда запрос принимает сервлет-контроллер, вытягивает какую нужно инфу и складывает ее в заранее оговоренное место (например, в атрибуты запроса), а затем передает управление соответствующей странице JSP. Тогда к моменту вывода title значение заголовка будет уже известно и доступно, скажем, через request.getAttribute("title"). На первых порах можно всю эту логику поместить и в JSP - но только для проверки работоспособности идеи. В реале этот код очень быстро разрастется, и в отсутствие развитых средств ООП станет просто неуправляемым. Вот тогда сама собой придет мысль о структурировании всего этого хозяйства в виде сервлетов и прочих вспомогательных классов. А вообще настоятельно рекомендую проштудировать тему JSP - с чего начать? - сэкономит массу времени и убережет от множества подводных граблей Это сообщение отредактировал(а) Stampede - 29.7.2008, 19:39 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
| fath_fast |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
ivg,
Но ведь title надо поместить в тегах <head></head>, а во время формирования этих тэгов в title будет null... Stampede, дело в том, что JSP я использую как представления для Spring-a,.. есть главная страница - ей я через её контроллер передаю аттрибуты (mv.addObject("content", "/add.htm")) - наименование страниц. Наименования отображены в dispatcher-servlet.xml, к примеру:
Эти то страницы я и подключаю к главной с помощью инклудов....
В том то и трабл Что скажешь, серьёзно намудрил |
||||||
|
|||||||
| ivg |
|
||||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Можно пойти другим путём.
includes.jsp:
header.jsp:
footer.jsp:
add.jsp:
Надеюсь мысль ясна. Правда при этом придётся переделать навигацию: Все ссылки, которые указывают на главную страницу с подключаемой "/add.htm" переделать на точно "/add.htm". То есть контроллер add_formControl будет вызван до начала рендеринга страницы - чего и добивались Ещё если у вас в контроллере главной страницы, кроме mv.addObject("content", "/add.htm") ещё какие то действия выполняются, то это можно прикрутить в помощью HandlerInterceptor так, что они будут выполняться для каждой такой "субстраницы". Это сообщение отредактировал(а) ivg - 2.8.2008, 10:40 |
||||||||
|
|||||||||
| fath_fast |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
ivg, это значит, что в каждых представленяих подстраниц, нужно прописывать инклуды шапки и низа?
|
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Ну да. Это один из вариантов. Ещё можно в контроллере главной страницы, когда уже определена субстраница, т. е. примерно в том месте где вы делаете mv.addObject("content", "/add.htm") просто вызывать код контроллера этой субстраницы. Короче суть в том что все контроллеры должны отработать до начала рендеринга. Тут можно посмотреть на MultiActionController например.
|
|||
|
||||
| fath_fast |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
ivg, спасибо за ссылку - посмотрел:
Что касается этого самого MultiActionControllera, насколько я понял из приведённого здесь примера http://forum.springframework.org/showthread.php?p=169177: один класс наследованный от MultiActionController может отвечать за множество протых контроллов страниц- это полюс, но ещё непонятен один момент, а если субстраницы - это сложные формы, чьи контроллы унаследованы от SimpleFormController.... Разве этот класс с подобным справиться? а что-нибудь вроде MultiActionFormController -a я не нашёл :( |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Ну что ж, в таком случае вариант с <%@ include file="header.jsp" %> и <%@ include file="footer.jsp" %>, мне кажется, лучше подходит.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |