![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Всем привет.
Перед тем как начать работать с Velocity, хотелось бы узнать, насколько легко генерировать шаблоны в шаблонах. Смысл прост, я его уже в главной теме о Velocity писал. Как можно организовать основной шаблон, в котором есть кусок от новостной ленты. т.е. что-то типа этого
ну, и у newTempate какой нибудь шаблон внутри со своими инкапсулированными данными. Если вопрос прозвучал неявно, вот он: как это написать на Velocity? |
|||
|
||||
| ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Вот так проще:
ну а если так как вы хотите(если я правильно понял) то что то вроде этого
|
||||
|
|||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 10 Всего: 40 |
Несомненно не проще. Представите, вы хотите сделать 1 рендерер на 4 разных блока новостей, как вы это делать будете? |
|||
|
||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Platon, Да, я об этом думал
В целом, то что нужно!!! НО, представьте, у вас есть возможность выбрасывать в трубу(pipe) страницу по мере ее генерации. А тут с таким методом придется ждать генерации всего блока, что не есть гуд... И еще раз НО,
|
|||
|
||||
| ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Почему это? Поменять 20 букв на 25 чем ваять целый класс? Что же касается Если блоки по разметке существенно отличаются, напишу 4 шаблона. В основном шаблоне
ну и где то в коде
ну если не существенно, то логику генерации блока новостей можно реализовать в самом шаблоне (одном). Пример класса я привел, чтоб показать только идею, вообще это , а точнее редко когда гуд. |
||||
|
|||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Нет, ну на самом деле, меня это вполне устраивает ^_^ конечно переделаю под себя но в целом оставлю.
|
|||
|
||||
| SuperFly |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Ну, еще раз прошу прощения за беспокойство.
Попробовал я навалять в сервлете этот шаблон, делаю вызов таким образом.
Получаю вот это:
Хм... странно, путь правильный, файл действительно существут.... как же так? |
||||
|
|||||
| SuperFly |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Так, вопрос вскоре после того как был задан вопрос быстро решился.
НО, вот другая проблема:
А вот как я их задаю:
Выводит вместо запланированого слудующее:
|
||||||||
|
|||||||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Ну, и + еще. Есть у Velocity Инструменты.
Интересует EscapeTool
Но вот вопрос, куда этот Toolbox Configuration Example вставить? |
|||
|
||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
С шаблоном вопрос решился $newss являлся пакетным классом, и поэтому, видимо, его не было видно через рефлексию (или что-то другое), хотя странно.Сделал класс публичным, сработало.
А с отступным инструментом проблемы. |
|||
|
||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Еще вопрос возник, целесообразно ли в веб приложении делать шаблонные объекты статическими.
Т.е. фактически все шаблоны сайта болтаются в памяти.
И если такой подход целесообразен, не подскажете как можно упростить этот кусок кода? |
|||
|
||||
| ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
в файл WEB-INF/toolbox.xml но это подразумевает, что вы будете использовать org.apache.velocity.tools.view.servlet.VelocityViewServlet в качестве сервлета, посмотрите примеры, которые идут вместе с velocity-tools. Как я понимаю, это не то, что нужно. Чтобы использовать возможности EscapeTool надо просто положить в контекст экземпляр org.apache.velocity.tools.generic.EscapeTool:
Я бы не стал так делать. Этот код вызывается в момент загрузки класса NewsView, вы можете гарантировать, что к этому моменту движок Velocity уже будет инициализирован? Я нет. Если цель оптимизация скорости - то это лишнее. Velocity кэширует темплейты (при соответствующих параметрах конфигурации); Мне вот не нравится сама идея инкапсуляции шаблона в классе. Возможно для вашей задачи это единственный вариант, но как насчет этого предложения |
||||
|
|||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Абсолютно верно ;) и отличное пояснение что нужно!
Хороший аргумент, сразу в голову не приходит. Добавлено через 2 минуты и 31 секунду Хотяяяя, если запустить инициализацию движка в слушателе, то вполне реально ))) |
|||
|
||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
После первого серьезного знакомства с Velocity, я понял, что этот вариант мне не подходит.
Хочу спросить, как такой подход можно организовать с помощью JSP? |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 10 Всего: 40 |
Как-то упустил из виду эту мысль. В том-то и дело, что блоки абсолютно идентичны, но инкапсулируют разные, к приеру, новости. Т.е. 3 идентичные колонки разных рубрик (Новости города, новости страны, новости мира) И тут, уж ну компонентная сущьность так и прет, а не кидаться шматками кода. |
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
А можно узнать, чем именно не подходит? Дело в том, что именно для целей организации вложенных шаблонов Velocity подходит как ничто другое. И уж во всяком случае намного лучше, чем jsp:include. Может, ты просто не до конца разобрался? Что касается хранения шаблонов в статических полях: а смысл? Если ради быстродействия, то, как справедливо заметил ivg, однажды скомпилированные шаблоны кэшируются движком, так что большого выигрыша от статической ссылки ты не получишь. А вот потерять - потеряешь. В удобстве обновления. Когда шаблон запрашивают у движка по имени, он может (как настроишь) чекнуть, не было ли изменений в соответствующем файле, и если что - перекомпилирует шаблон. То есть ты можешь подрихтовать текст шаблона, нажать рефреш в браузере, и сразу увидеть изменения. В случае же хранения скомпилированного темплейта такой номер уже не пройдет. Так штааа... И еще не удержусь, чтобы повторить: гибче и мощнее средства чем Velocity (ну или другой шаблонный движок) для работы с множественными/повторяющимися/вложенными/параметирозованными/whatever блоками вебных (и не только) страниц - человечество еще не придумало -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
| SuperFly |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Очень приятно, что такой легендарный участник форума вступил со мной в диалог ^_^
Начнем по порядку.
Да, первое впечатление было таким, в принципе и сейчас, соглашусь с этим, но дело в том, что синтаксис Velocity заведомо урезан, или я как раз тут-то и ошибаюсь? JSP же позволяет писать всё, что я захочу без дополнительных привязок, к примеру <%= EspaceTool.html() ?> никаких доп настроек, разве что импортирование, но это в IDE не составит много времени добавить. От этой мысли я сразу же отказался ^_^ сам дошел до того, что можно будет перезалить файлы без редеплоя. Да, и с этим не осмелюсь спорить... НО, я наверно дуб дубом. Как мне представить вот этот кусочек шаблона в Velocity?
Сразу говорю, код невалидный, можно назвать псевдокодом, смесь JSP и Velocity, предоставлен только в ознакомительных целях. Добавлено @ 22:52 Да опишу, немного... Тут несколько тачек раскиданы по 2 колонкам. И еще кто заметил, теги PHP проскальзывают *CONFUSED* Это сообщение отредактировал(а) SuperFly - 27.11.2007, 23:01 |
||||
|
|||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Ну, что вот за па_ла такая???
http://javagu.ru/portal/dt?last=false&...U_SECTION_80703 Везде эта статья попадается и везде
Во всем интернете такую главу не сыскать :( |
|||
|
||||
| Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Понятно. Смари.
Знач тебе надо выводить описания машинок в две колонки. Нормального оператора цикла в Velocity нет, но всегда можно обойтись if/else (интересным образом, за более чем три года юзания Velocity это первый раз, когда я сталкиваюсь с такой необходимостью... с чего бы это?) Если бы задача стояла выводить описания по одному на строку, то весь код уместился бы в три строчки. Для удобства выделим хтмл описания в отдельный макрос, чтобы не болтался под ногами:
Ну а теперь нам только остается переделать это так, чтобы выводилось в две колонки. Для этого можно изобразить два вложенных цикла, как в твоем примере, а можно задействовать штатный списочный цикл, добавляя в нужных местах хтмл начала и конца строки:
Ну да, я согласен, что если бы был человеческий синтаксис для цикла, получилось бы намного изящнее и короче. Но я еще раз повторяю: такие задачи возникают далеко не каждый день. В большинстве ситуаций вполне хватает списочного цикла. Это сообщение отредактировал(а) Stampede - 28.11.2007, 00:13 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||
|
|||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Stampede, изящьность первого куска кода достигнута за счет того
К сожалению, у меня тот случай, где с меня требуют разбивать данные по колонкам :( Пока хлеб мой - PHP, но у меня серьезные намерения на Java, и как бы не очень приятно было бы, если бы проект в корне своем заложил Velocity, а тут такой тяжелый подарок. Поэтому и необходимо знать еще 1 прием генерации шаблонов, чтоб не подловили меня. И вы наверно, сами видите, что Velocity в этом примере потерял свою стройность. ЗЫ. Я не противник Velocity, но стоит смотреть правде в лицо. |
|||
|
||||
| ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Смари...
Ну что насчёт стройности? |
||||
|
|||||
| SuperFly |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
ivg, на самом деле, немного смелкалки и натасканости в Velocity действительно делает его поистине магическим инструментом!!!
ivg заслуживает поощрения! Модераторы, прошу учесть. Добавлено через 2 минуты и 19 секунд Удивительно, я просто в восхищении!!! насколько прост оказался код. |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 10 Всего: 40 |
+1 Сделано.
ПС. Зачем модераторы? У них своих дел навалом. |
|||
|
||||
| SuperFly |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Знаете, к какому выводу я пришел.
Я буду делать следующим образом вложенные компоненты:
Вложенный шаблон я вставляю вот так: $main.display($out) Оказалось удобнее всего. |
||||||||
|
|||||||||
![]()
|
| Правила форума "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. |