| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Velocity |
| Автор: SuperFly 21.11.2007, 15:43 | ||
| Всем привет. Перед тем как начать работать с Velocity, хотелось бы узнать, насколько легко генерировать шаблоны в шаблонах. Смысл прост, я его уже в главной теме о Velocity писал. Как можно организовать основной шаблон, в котором есть кусок от новостной ленты. т.е. что-то типа этого
ну, и у newTempate какой нибудь шаблон внутри со своими инкапсулированными данными. Если вопрос прозвучал неявно, вот он: как это написать на Velocity? |
| Автор: ivg 21.11.2007, 16:40 | ||||
Вот так проще:
ну а если так как вы хотите(если я правильно понял) то что то вроде этого
|
| Автор: Platon 21.11.2007, 17:00 |
Несомненно не проще. Представите, вы хотите сделать 1 рендерер на 4 разных блока новостей, как вы это делать будете? |
| Автор: SuperFly 21.11.2007, 17:10 | ||
| Platon, Да, я об этом думал В целом, то что нужно!!! НО, представьте, у вас есть возможность выбрасывать в трубу(pipe) страницу по мере ее генерации. А тут с таким методом придется ждать генерации всего блока, что не есть гуд... И еще раз НО,
|
| Автор: ivg 21.11.2007, 23:01 | ||||
Почему это? Поменять 20 букв на 25 чем ваять целый класс? Что же касается Если блоки по разметке существенно отличаются, напишу 4 шаблона. В основном шаблоне
ну и где то в коде
ну если не существенно, то логику генерации блока новостей можно реализовать в самом шаблоне (одном). Пример класса я привел, чтоб показать только идею, вообще это , а точнее редко когда гуд. |
| Автор: SuperFly 22.11.2007, 11:15 |
| Нет, ну на самом деле, меня это вполне устраивает ^_^ конечно переделаю под себя но в целом оставлю. |
| Автор: SuperFly 22.11.2007, 15:02 | ||||
| Ну, еще раз прошу прощения за беспокойство. Попробовал я навалять в сервлете этот шаблон, делаю вызов таким образом.
Получаю вот это:
Хм... странно, путь правильный, файл действительно существут.... как же так? |
| Автор: SuperFly 22.11.2007, 15:26 | ||||||||
| Так, вопрос вскоре после того как был задан вопрос быстро решился. НО, вот другая проблема:
А вот как я их задаю:
Выводит вместо запланированого слудующее:
|
| Автор: SuperFly 22.11.2007, 16:11 | ||
| Ну, и + еще. Есть у Velocity Инструменты. Интересует EscapeTool
Но вот вопрос, куда этот Toolbox Configuration Example вставить? |
| Автор: SuperFly 23.11.2007, 18:07 |
| С шаблоном вопрос решился $newss являлся пакетным классом, и поэтому, видимо, его не было видно через рефлексию (или что-то другое), хотя странно.Сделал класс публичным, сработало. А с отступным инструментом проблемы. |
| Автор: SuperFly 24.11.2007, 09:22 | ||
| Еще вопрос возник, целесообразно ли в веб приложении делать шаблонные объекты статическими. Т.е. фактически все шаблоны сайта болтаются в памяти.
И если такой подход целесообразен, не подскажете как можно упростить этот кусок кода? |
| Автор: SuperFly 24.11.2007, 14:34 | ||
Абсолютно верно ;) и отличное пояснение что нужно!
Хороший аргумент, сразу в голову не приходит. Добавлено через 2 минуты и 31 секунду Хотяяяя, если запустить инициализацию движка в слушателе, то вполне реально ))) |
| Автор: SuperFly 27.11.2007, 21:37 |
| После первого серьезного знакомства с Velocity, я понял, что этот вариант мне не подходит. Хочу спросить, как такой подход можно организовать с помощью JSP? |
| Автор: Platon 27.11.2007, 21:53 |
Как-то упустил из виду эту мысль. В том-то и дело, что блоки абсолютно идентичны, но инкапсулируют разные, к приеру, новости. Т.е. 3 идентичные колонки разных рубрик (Новости города, новости страны, новости мира) И тут, уж ну компонентная сущьность так и прет, а не кидаться шматками кода. |
| Автор: Stampede 27.11.2007, 22:21 | ||
А можно узнать, чем именно не подходит? Дело в том, что именно для целей организации вложенных шаблонов Velocity подходит как ничто другое. И уж во всяком случае намного лучше, чем jsp:include. Может, ты просто не до конца разобрался? Что касается хранения шаблонов в статических полях: а смысл? Если ради быстродействия, то, как справедливо заметил ivg, однажды скомпилированные шаблоны кэшируются движком, так что большого выигрыша от статической ссылки ты не получишь. А вот потерять - потеряешь. В удобстве обновления. Когда шаблон запрашивают у движка по имени, он может (как настроишь) чекнуть, не было ли изменений в соответствующем файле, и если что - перекомпилирует шаблон. То есть ты можешь подрихтовать текст шаблона, нажать рефреш в браузере, и сразу увидеть изменения. В случае же хранения скомпилированного темплейта такой номер уже не пройдет. Так штааа... И еще не удержусь, чтобы повторить: гибче и мощнее средства чем Velocity (ну или другой шаблонный движок) для работы с множественными/повторяющимися/вложенными/параметирозованными/whatever блоками вебных (и не только) страниц - человечество еще не придумало |
| Автор: SuperFly 27.11.2007, 22:50 | ||||||
| Очень приятно, что такой легендарный участник форума вступил со мной в диалог ^_^ Начнем по порядку.
Да, первое впечатление было таким, в принципе и сейчас, соглашусь с этим, но дело в том, что синтаксис Velocity заведомо урезан, или я как раз тут-то и ошибаюсь? JSP же позволяет писать всё, что я захочу без дополнительных привязок, к примеру <%= EspaceTool.html() ?> никаких доп настроек, разве что импортирование, но это в IDE не составит много времени добавить. От этой мысли я сразу же отказался ^_^ сам дошел до того, что можно будет перезалить файлы без редеплоя.
Да, и с этим не осмелюсь спорить... НО, я наверно дуб дубом. Как мне представить вот этот кусочек шаблона в Velocity?
Сразу говорю, код невалидный, можно назвать псевдокодом, смесь JSP и Velocity, предоставлен только в ознакомительных целях. Добавлено @ 22:52 Да опишу, немного... Тут несколько тачек раскиданы по 2 колонкам. И еще кто заметил, теги PHP проскальзывают *CONFUSED* |
| Автор: SuperFly 27.11.2007, 23:43 | ||
| Ну, что вот за па_ла такая??? http://javagu.ru/portal/dt?last=false&provider=javaguru&ArticleId=GURU_ARTICLE_81157&SecID=GURU_SECTION_80703 Везде эта статья попадается и везде
Во всем интернете такую главу не сыскать :( |
| Автор: Stampede 28.11.2007, 00:09 | ||||
| Понятно. Смари. Знач тебе надо выводить описания машинок в две колонки. Нормального оператора цикла в Velocity нет, но всегда можно обойтись if/else (интересным образом, за более чем три года юзания Velocity это первый раз, когда я сталкиваюсь с такой необходимостью... с чего бы это?) Если бы задача стояла выводить описания по одному на строку, то весь код уместился бы в три строчки. Для удобства выделим хтмл описания в отдельный макрос, чтобы не болтался под ногами:
Ну а теперь нам только остается переделать это так, чтобы выводилось в две колонки. Для этого можно изобразить два вложенных цикла, как в твоем примере, а можно задействовать штатный списочный цикл, добавляя в нужных местах хтмл начала и конца строки:
Ну да, я согласен, что если бы был человеческий синтаксис для цикла, получилось бы намного изящнее и короче. Но я еще раз повторяю: такие задачи возникают далеко не каждый день. В большинстве ситуаций вполне хватает списочного цикла. |
| Автор: SuperFly 28.11.2007, 00:27 |
| Stampede, изящьность первого куска кода достигнута за счет того К сожалению, у меня тот случай, где с меня требуют разбивать данные по колонкам :( Пока хлеб мой - PHP, но у меня серьезные намерения на Java, и как бы не очень приятно было бы, если бы проект в корне своем заложил Velocity, а тут такой тяжелый подарок. Поэтому и необходимо знать еще 1 прием генерации шаблонов, чтоб не подловили меня. И вы наверно, сами видите, что Velocity в этом примере потерял свою стройность. ЗЫ. Я не противник Velocity, но стоит смотреть правде в лицо. |
| Автор: ivg 2.12.2007, 10:31 | ||||
Смари...
Ну что насчёт стройности? |
| Автор: SuperFly 2.12.2007, 10:48 |
| ivg, на самом деле, немного смелкалки и натасканости в Velocity действительно делает его поистине магическим инструментом!!! ivg заслуживает поощрения! Модераторы, прошу учесть. Добавлено через 2 минуты и 19 секунд Удивительно, я просто в восхищении!!! насколько прост оказался код. |
| Автор: Platon 2.12.2007, 10:54 |
| +1 Сделано. ПС. Зачем модераторы? У них своих дел навалом. |
| Автор: SuperFly 17.1.2008, 11:49 | ||||||||
| Знаете, к какому выводу я пришел. Я буду делать следующим образом вложенные компоненты:
Вложенный шаблон я вставляю вот так: $main.display($out) Оказалось удобнее всего. |