|
Модераторы: LSD, AntonSaburov |
|
Domestic Cat |
|
||||||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Консольное приложение в
1. Сначала нужно стянуть Велосити, версия 1.4: http://jakarta.apache.org/site/downloads/d...city-engine.cgi Разархивируем в директорию, скажем, C:\velocity\ 2. В разархивированном виде можно ради интереса собрать Велосити самим : для этого нужно зайти в директорию build и запустить ант. Далее владельцам тигра нужно матерно обругать тех, кто решил использовать переменную enum и установить в билд файле source="1.4" проперти. Далее можно прогнать все возможные тесты с помощью ant test. 3. Для тех, кто делать этого не хочет, в корне лежат 2 jarа : velocity-1.4.jar и velocity-dep-1.4.jar. Их нужно добавить в CLASSPATH. 4. Теперь можно создать свое первое десктоп приложение (сервлет надеюсь добавить на днях). Начинаем с темплейта: создаем файл test.vm такого содержания
Это очень простой темплейт. Он содержит директиву #set и одну переменную. 5. Пишем файл VeloTest.java
Чтоб иксепшны не путались под ногами, я их убрал в throws. 6. Компилим javac VeloTest.java и запускаем: java VeloTest
-------------------- |
||||||
|
|||||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Посмотрел на http://jakarta.apache.org/, что такое Velocity, но все равно не понял. Для чего используются эти шаблоны?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Domestic Cat |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
-------------------- |
|||
|
||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Вот именно это я и не понял. Можно вызывать методы из текста страницы? Так это можно сделать и без использования сторонних технологий.
Исходя из твоего примера, я так понял, что можно иметь готовый шаблон (который представляет из себя HTML, XML, SQL, текст и т.д.) и передавать в него значения переменных, получая таким образом документ, запрос и т.д. Но ведь точно так же мы можем сделать и в тексте обычной JSP. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Domestic Cat |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Текст обычной JSP - это Java код. Задача фреймворка состоит в том, чтобы презентацию сделать как можно более простой. Тогда за хтмл можно посадить обычного веб-дизайнера. Далее этот дизайнер делает супер-пупер страницу. Программист пишет бизнес логику. Они встречаются, и программер дает дизайнеру имена переменных. Дизайнер вставляет их в свою страницу, типа "Привет, $name".
То есть, дизайнеру не нужно ничего знать о java или jsp. Кроме того, четкое отделение презентации от модели есть хорошо, и называется Модель 2 паттерн. -------------------- |
|||
|
||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Но ведь можно просто привести все к виду обычного HTML с включенными <%= name %>, или, в крайнем случае, с циклами или итераторами, и мы получим ту же самую изоляцию (хотя у меня пока сводить все к этому не получается , все равно на странице присутствуют методы) -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Sleepy_PIP |
|
|||
Опытный Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 2 Всего: 12 |
так задача UI интерфейса везеде и всегда - не просто выдать юзеру какой-то отчет, хоть он и прекрасно строится в терминах Velocity, но и получить реакцию от клиента. т.е. интерактив .... т.е. на лицо - в Velicity можно писать _выходные_ _отчеты_, не требующиее интеракива. Это конечно хорошо, но далеко не все, и к тому-ж проигрывает PDF отчетам. Ну все конечно ИМХО чайника -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
Domestic Cat |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Нет такой серверной технологии, которая б давалa интерактив. А JavaScript или аналогичый клиентский скрипт / АктивХ / апплет никто не мешает пользовать. -------------------- |
|||
|
||||
Domestic Cat |
|
||||||||||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Пример посерьезнее.
Запуск дает:
-------------------- |
||||||||||
|
|||||||||||
Се ля ви |
|
|||
Java/SOAрхитектор Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 3 Всего: 127 |
Domestic Cat
По-моему, довольно похожие облегченные конструкции встречались в спецификации JSP 2.0 - там тоже есть конструкции без традиционных "<%" и "%>" - можно их сравнить как-то? За топик большое спасибо) -------------------- |
|||
|
||||
Domestic Cat |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Нет, Велосити - это template engine, jsp - это ява код внутри хтмла Велосити похож конечно, например, можно "вызывать методы" : $product.setPrice(55). Разница в том, что темпейт - файл vm парсится и все, jsp компилируется в класс и исполняется. В темплейтах нельзя определять методы. Зато можно делать макросы. -------------------- |
|||
|
||||
Zandr |
|
|||
Опытный Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: нет Всего: 13 |
Что ни начнешь писать - все компилятор получается... |
|||
|
||||
Domestic Cat |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Скорее интерпретатор. А вообще, мощный шаблонный движок. -------------------- |
|||
|
||||
simanyay |
|
|||
Антон Ковалёв Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 2 Всего: 36 |
У меня вопрос:
Какое преимущество, в плане производительности, даёт Velocity по сравнению с использованием JSP (<%= %>)? Просто я не до конца понимаю смысла Velocity для web-страниц. -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
simanyay |
|
|||
Антон Ковалёв Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 2 Всего: 36 |
Вопрос и сомнения вроде отпали. Советую всем, у кого такой же вопрос прочитать это: Case Study: JSP vs. Velocity
Добавлено @ 16:12 Попробую, в общем курсовую написать используя Velocity. Авось и получится -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
А разве на JSTL этого нельзя сделать?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Я могу (и хочу) много-много написать о том, почему Velocity раз так в восемьдесят пять лучше JSP, но мы сейчас уезжаем на длинные выходные в Банфф, так что вернусь не раньше понедельника. А тем, у кого есть неясности/сомнения, советую пока что погуглевать по слову IoC - inversion of control. Дело в том, что IoC - это не самый очевидный (и часто опускаемый в обсуждениях) аспект использования Velocity, но на мой взгляд это самое важное. До понедельника! |
|||
|
||||
simanyay |
|
|||
Антон Ковалёв Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 2 Всего: 36 |
Ждём-с с нетерпением Гуглим до понедельника. -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
Chinook |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 21.5.2005 Где: Vancouver, BC, Ca nada Репутация: нет Всего: нет |
Это как-то очень слабо напоминает HTML, и выучить это html-девелоперу никак не легче, чем библиотеки тегов, которые намного больше похожи на HTML. IMHO. |
|||
|
||||
Stampede |
|
||||||||||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Ну. поехали...
1. Ты помнишь, как все начиналось... Начну я не с Velocity, а начну я издалека, с JSP. Изначально технология JSP задумывалась как дополнение к сервлетам, и должна была стать нашим ответом Чемберлену, то бишь мелкософту с их ASP. И была она в общем неплохой технологией, по крайней мере по сравнению с временами, когда разработчикам приходилось писать код вроде
И когда разработчики получили в свои руки технологию, которая позволяла им (в теории) разделять модель, вью и контроллер, то они решили, что настало полное и всеобщее щастье, и стали дружно все лабать на JSP. О новой технологии тут же раструбили по всем жабным изданиям, понавыпускали книжек, и пошло-поехало. Как же, ведь Sun опубликовал стандарт, под который можно писать веб приложения, которые будут исполняться в любом контейнере! Слава открытым спецификациям! Даешь конкурентный рынок контейнеров! Эйфория от появления новой технологии была настолько сильной, а пиар - таким массированным, что в массовом сознании очень быстро сложился стереотип: J2EE веб приложение == Servlets + JSP. Но за фанфарами остался незамеченным один маленький факт: что JSP - это отнюдь не единственная и совсем не обязательно самая лучшая технология для генерации динамических веб страниц. 2. Не все то золото, что кричит Например, очень скоро выяснилось, что код JSP в реальном сложном приложении получается малость тово, запутанный. Да так, что подчас вообще хрен разберешь, что на ней делается. Потому что бины бинами (модель), а во вью все равно приходится использовать кучу логики, в первую очередь условия и циклы. И хоть данную проблему с горем пополам все-таки решили путем введения библиотеки тегов, но код все равно остался громоздким, неудобочитаемым и плохо сопровождаемым - из-за обилия Java вставок. Присутствие большого числа Java-вставок на страницах - это, увы, непреложный медицинский факт , и происходит это по одной простой причине: потому что JSP это позволяет. Понимаете, технология JSP просто сама напрашивается, подставляется, чтобы ее хакнули (хакнули не во взломном, а в технологическом понимании). А программисты и рады стараться, без зазрения совести хакают ее во все дыры - а что, сама напросилась. Происходит это примерно так: возникает новое требование, скажем, добавить еще полей к таблице, или там поменять порядок сортировки, или еще что-нибудь. Если делать это по грамотному, то надо бы дописать классов, выделить что-то в общий интерфейс, кое-что срефакторить, ну и т. д. Делать это - в лом. Нафиг, когда можно прямо на странице написать методец. котрый по-быстрому пофиксит ситуацию. Часто ли такое происходит? Сплошь и рядом, особенно в ситуациях, когда готово должно было быть еще вчера. Как следствие, через какое-то время страницы оказываются просто завалены вставками - бестолково написанными, с массой дублированного кода, раскиданного по разным стрвницам. И не надо думать, что это происходит только на поздних этапах жизненного цикла приложения. Даже во время непосредственно разработки, на пути от прототипа к готовому продукту, все время возникают новые требования, всплывают разные нюансы и т. д. Так вот, самая большая беда JSP как технологии, на мой взгляд, это то, что она does not promote good design (не промоутит правильный дизайн?). На самом деле JSP вполне можно приспособить в качестве удовлетворительной вью технологии, и я вернусь к этой теме после разговора о Velocity. 3. И тут на сцене появляется... Правильно, вы угадали. Появляется Velocity, собственной персоной. Если точнее, то целая группа шаблонных движков: FreeMarker, WebMacro и т. д. Основная идея была позаимствована из скриптовых языков типа PHP: ты передаешь странице кучу параметров (например, через переменные окружения), а в коде страницы ссылаешься на них по имени. В результате у тебя получается относительно чистый HTML код, только вместо конкретных строк фигурируют конструкции вида:
Но дело не ограничивается одними строками. Благодаря наличию такой штуки как интроспекция, в жабных шаблонных движках появилась вожможность ссылаться на методы и переменные классов очень простым образом:
Вы не находите, что это элегантно, просто, удобно, читабельно, сопровождаемо - это, наконец, просто красиво! И, в отличие от JSP, это промоутит правильный дизайн с самого начала. Почему? Потому что такой подход мягко и ненавязчиво принуждает вас думать о вашем приложении в терминах объектов, которые наиболее естественным образом описывают вашу предметную область - потому что это именно то, что вы будете передавать вашим страницам, и чем эти страницы будут оперировать. Вы скажете, да это же просто бины! Бины, да не совсем. Например, на бины в JSP достаточно неудобно ссылаться. Кроме того, их надо явно описывать. Потом, сама модель использования бинов в JSP предполагает pull-характер их создания и инициализации, при этом бины сами ответственны за доступ к данным. То есть страница должна вытягивать данные, которые ей нужны, причем последовательность доступа к данным нередко определяется порядком, в котором элементы появляются на странице, что есть не всегда самый лучший или безопасный порядок. В противоположность этому, Velocity исповедует принципиально иной, push-подход, при котором сервлет (или его делегат - но об этом чуть позже), зная, что должно быть на странице, подготавливает всю необходимую информацию, и затем пихает все это в шаблон. Или, точнее, передает шабонному движку вместе с шаблоном для разрешения имен. В терминах Velocity это называется слиянием:
Вы, конечно, заметили, что одним из параметров передается Writer, но не придали этому значения. А значение придать - категорически необходимо. Потому что это показывает, что Velocity никоим образом не привязан к выводу в сокеты, и если говорить по большому счету, то и вообще к веб окружению. А это значит, что одни и те же страницы можно использовать для генерации чего угодно: писем, оффлайновых отчетов, SQL запросов - тут все ограничивается только вашей фантазией. Второй параметр, который передается движку, возможно, вас несколько озадачил: Context context. Не надо его бояться. Velocity контекст - это, грубо говоря, просто HashMap, в который вы суете объекты для страницы, а ключом к этим объектам служат имена, по которым вы ссылаетесь на них из шаблона. Код для запихивания выглядит очень просто:
И фсе! Слейте созданный таким образом контекст с описанным ранее шаблоном, и у вас получится отличная веб страница! Я не буду рассказывать о различных конструкциях Velocity, предназначенных для облегчения вам жизни: set, if-else, foreach, include, macro и других - поверьте, у них очень простой синтаксис, и они хорошо документированы. Давайте лучше поговорим о более высоких вещах - например, об инверсии управления. 4. Немного об инверсии Я не буду долго разливаться мыслю по древу о том, что такое инверсия управления. Если на пальцах, это такая организация системы, при которой ты смотришь на вещи и думаешь в терминах понятий иных, нежели в другом подходе. Например, event-driven подход к программированию гуя - это инверсный подход по сравнению с тем, когда ты всю логику программируешь в классе окна, ждешь всяких событий и как-то на них реагируешь. Так вот, Velocity, как уже говорилось, принуждает вас смотреть на вещи несколько отличным образом по сравнению с тем, к чему принуждала вас технология JSP, и в этом смысле может характеризоваться как инверсия управления. Но семантически у меня просто язык не поворачивается назвать инверсией то, что ставит вещи с головы обратно на ноги. Само слово инверсия содержит намек на какую-то шиворот-навыворотность. Но ведь Velocity не виновата, что JSP появилась первой и насадила стандарт веб-программистского мышления, который, если вдуматься, и был шиворот-навыворотным с позиций здравой логики. А здравый смысл говорит нам, что думать о системе надо в первую очередь в терминах того, что эта система должна хорошего делать, и лишь потом - о том, как присобачить ко всему этому веб интерфейс. То есть система бронирования авиабилетов должна хорошо бронировать авиабилеты, электронный аукцион - помогать совершать акты купли-продажи, а система документооборота - вести учет движения документов. Какой при этом у системы будет интерфейс - совершенно фиолетово: это может быть автоматический телефонный сервис, толстый клиент, веб интерфейс, межмашинный интерфейс в виде веб-сервисов, и т. д. Создатели JSP как спецификации этого абсолютно не понимали, а вслед за ними не понимают этого и миллионы разработчиков, последовавшие за ними. Мне горько и обидно это видеть, что, собственно, и побудило меня сесть и написать эту статью. Надеюсь, я смог донести основные положения, из которых складывается мое видение ситуации с веб разработкой, и то. какое место в нем занимает Velocity. В качестве примера того, как это видение получило практическую реализацию, можете взглянуть на мой сайт Английский без дураков. Надеюсь, наш разговор о Velocity не закончен, и после вашей конструктивной критики мы продолжим обсуждение. До новых встреч в эфире! |
||||||||||
|
|||||||||||
Domestic Cat |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
-------------------- |
|||
|
||||
simanyay |
|
|||
Антон Ковалёв Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: 2 Всего: 36 |
Я понял зачем нужен Velocity! Буду юзать его в Jizer'e. Спасибо.
-------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
Souljah |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 148 Регистрация: 24.12.2004 Репутация: 3 Всего: 7 |
тов. Stampede не в первый раз радует меня трезвостью мышления
поставьте плз + от моего имени, а то я еще не дорос до такого действа |
|||
|
||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Это всегда пожалуйста. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
pvo |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 92 Регистрация: 7.10.2005 Где: Мск Репутация: 5 Всего: 7 |
Velocity штука конечно хорошая. Но есть у нее пара изрядных минусов:
1. С рекурсией проблемы. Если передать в шаблон объект с "деревянной" структурой, то построить результирующий документ без танцев с бубнами не получится. (в версии 1.3, по крайней мере) 2. Скорость. Как не крути, но она меньше, чем у jsp. Компилятор-то пока-что не дописан ... |
|||
|
||||
Stampede |
|
||||||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Минусы, конечно, есть, но вот именно по поводу перечисленного - возражаю.
Что в данном случае понимается под рекурсией? Рекурсивный вызов макросов? Честно говоря, не знаю, не пробовал, но беглый поиск в гугле показывает, что с этим проблем быть не должно. Наоборот, там один чувак жалуется, что Velocity не ограничивает глубину рекурсии, из-за чего его программа иногда подвисает. Держите, говорит, меня семеро, а то если я разойдусь, так уж разойдусь Да, речь там идет о 1.4.
Я могу с цифрами в руках доказать, что разница как минимум несущественна, и что затраты времени на собственно рендеринг совершенно пустяковые. Помимо этого, я предлагаю поспорить на тему того, как общая архитектура веб приложения может быть значительно более критическим фактором в плане производительности, чем выбор той или иной технологии рендеринга. А про минусы я потом скажу отдельно |
||||||
|
|||||||
Ортхэннер |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.1.2005 Где: Благовещенск Репутация: нет Всего: нет |
М-да. А вы вот объясните, господа, чем, кроме синтаксиса, отличается Velocity от JSPX+JSTL. А то я немного не понимаю. Дело в том, что, как показывает практика, вставлять галимый Java-код в JSPX-страницы, мягко говоря, обломно. Если и получится - прочитать это точно будет потом нельзя. Но получается зачастую не с первого раза и выглядит жутко. А вот с библиотеками тегов и EL'ем - очень красиво и очень просто.
|
|||
|
||||
pvo |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 92 Регистрация: 7.10.2005 Где: Мск Репутация: 5 Всего: 7 |
1. Гибкостью. Например, есть у нас Velocity & JSP шаблоны некоторой html страницы. В один прекрасный момент нам требуется отправить эту страницу по почте, причем не в процессе обслуживания запроса (ServletRequest не доступен). Что нужно будет делать в случае с jsp? \ В случае с велосити один и тот же код можно использовать и для генерации html, и для генерации email. 2. Обломно или не обломно добавлять java код в jsp страницы, но народ все равно упорно это делает. 3. Лаконичностью. ИМХО, понять шаблон velocity проще, нежели многие jsp шаблоны с использованием кучи кастом тегов ... |
|||
|
||||
Guest |
|
|||
Unregistered |
То, что Velocity на порядок выше JSP - не вопрос!
JSP - это дань старым и корявым технологиям, типа PHP, ASP и прочия... Но они решают свою нишу задач, типа быстро нацарапать сайт из 10 страниц с несложным функционалом. Для серьезных вещей уровня предприятия, такие движки не самый лучший выбор. Тут на сцену выходит Velocity и другие фрамеворки,а вот сравнивать его с другими технологиями и имеет смысл! Например, ХМЛ+ХСЛТ! Мое мнение, он тут проигрывает.... |
|||
|
||||
Ортхэннер |
|
||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.1.2005 Где: Благовещенск Репутация: нет Всего: нет |
Да я вообще-то не про JSP, а про JSPX. Это несколько разные вещи с разным синтаксисом. И добавить код java в JSPX-страницу - задача довольно трудоёмкая. Ибо приходится все кавычки и знаки сравнения заменять соответствующими сущностями. Головняк ещё тот. К тому же, хоть убей, ты уже не сможешь задействовать выражения в атрибутах (типа <%=a%>). По поводу "кучи кастом тегов" - ну это скорее вопрос именования. Но вот первый пункт... принял. Это сообщение отредактировал(а) Ортхэннер - 8.11.2005, 06:20 |
||||
|
|||||
Wowa |
|
|||
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Для обсуждения этого я создал отдельную тему: http://forum.vingrad.ru/index.php?act=ST&a...80&unread=1 Т.к. вероятно там много о чем можно поговорить. |
|||
|
||||
Nobody |
|
|||
Опытный Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: 1 Всего: 16 |
Velocity - это, в отличие от JSP, совсем не обязательно серверная технология.
-------------------- |
|||
|
||||
Се ля ви |
|
|||
Java/SOAрхитектор Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 3 Всего: 127 |
Тут вот по работе столкнулся-таки с велосити. В принципе штука удобная, но что огорчает, так это отсутствие типизации - чем-то мне отдалённо помесь JS и SSI напомнило. И так же огорчает отсутствие поддержки в средах разработки - например, не нашёл никакого путного плагина для IDEA.
-------------------- |
|||
|
||||
Stampede |
|
||||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Ну хорошо, давай пофантазируем, как выглядел бы синтаксис шаблонного движка, если бы он поддерживал типизацию. Допустим, мы имеем некую страницу интернет-магазина, которая использует следующие переменные:
Мы могли бы предусмотреть синтаксис для объявления переменных, что-то вроде:
Хорошо это было бы или плохо? Если сделать объявление опциональным (ведь движку все равно, есть объявление или нет: он ведь полагается на runtime информацию и рефлексию), то не исключено, что это была бы полезная фича: можно было бы написать плагин, который по крайней мере может делать:
Но он по-прежнему был бы бесполезен для контроля того, что все используемые переменные попадают в контекст, и причем под правильными именами, потому что эта инфа доступна только в рантайме. Но вот заставлять разработчика делать явные объявления - это будет уже насилие над личностью А что касается опционального объявления, то это вполне можно было бы реализрвать как надстройку в форме синтаксиса, который Velocity воспринимает как комментарии, например ##use вместо #use. И уже на этой основе наваять соответствующий плагин. Если кто хочет отличиться, дарю идею бесплатно Тут ничего нереального нет - надо просто взять и сделать. |
||||
|
|||||
Aazmandius |
|
|||
O_o Профиль Группа: Участник Сообщений: 135 Регистрация: 29.4.2006 Где: Vancouver Репутация: 3 Всего: 6 |
А вот такой вопрос:
можно ли шаблон включить внутрь другого шаблона? и что при этом делать с контекстами, которые в общем случае могут быть разными? Грубо говоря, например у нас есть шаблон, который описывает некую веб-страницу, он включает в себя хэдер, футер и др. области. Каждой из областей соответствует свой шаблон, который нужно вставить в нужное место шаблона страницы. Контексты у них допустим разные, возможно ли такое подключение? Вот нашел в документации: One of the fundamental and important parts about Velocity is the resource management system and the resource loaders. They are referred to as 'resources' here rather than 'templates' because the resource management system will also handle non-template reasources, specifically things that are loaded via the #include() directive. Судя по этому, поддержка подгрузки шаблонов есть, но как ее реализовать? Это сообщение отредактировал(а) Aazmandius - 19.6.2006, 15:55 |
|||
|
||||
Aazmandius |
|
|||
O_o Профиль Группа: Участник Сообщений: 135 Регистрация: 29.4.2006 Где: Vancouver Репутация: 3 Всего: 6 |
Решение почти найдено Нужно использовать директиву #parse(), только вот что делать с контекстом шаблона, который мы парсим? куда его подключать?
Это сообщение отредактировал(а) Aazmandius - 20.6.2006, 15:13 |
|||
|
||||
tux |
|
|||
Летатель Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
А можно ли перенести из sessionContext и aplicationContext в VelocityContext аттрибуты? Но не потупому 4ерз for .
|
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Смотря что имеется в виду: javax.ejb.SessionContext? А "aplicationContext" - это что за зверь? Класс из какого-то конкретного контейнера? Или просто некий общий контекст приложения? В принципе самое, пожалуй, универсальное решение - это написать обертку-адаптер, который будет имплементировать интерфейс org.apache.velocity.context.Context. Там всего пять методов, которые при реализации надо будет просто перенаправить подлежащему мапу или другому контексту: containsKey(), get(), getKeys(), put(), remove(). Но можно и по-деревянному, положить весь контекст в VelocityContext под своим именем и доступаться к его элементам, используя синтакс Velocity, например $applicationContext.get("someKey"); Понятно, что второй способ менее удобен, потому что в первом варианте мы бы обратились к этому же объекту просто как $someKey. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Я имел в виду web.Скажем есть сервлет я беру sessionContext i servletContext в обоих есть аттрибуты.Как сделать 4тобы Velocity увидел их.Коне4но можно по тупоми через for перекладывать но ...
|
|||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
решил так: Simple test: $test.id
|
|||
|
||||
Alexandr87 |
|
|||
дыкий псых Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
есть какиендь шаблоны для сервлетов-контроллеров, использующих velocity?
|
|||
|
||||
rilio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 28.10.2006 Где: С-Петербург Репутация: нет Всего: нет |
Вот есть пример очень простого фреймворка на Velocity + AJAX: Rilio framework . Документация частично на русском. Это сообщение отредактировал(а) rilio - 28.10.2006, 21:49 |
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
||||
|
||||
Alexandr87 |
|
|||
дыкий псых Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
имено шаблоны проектирования.
|
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Я не знаю, есть ли какие-то специальные design patterns для разработки именно "сервлетов-контроллеров, использующих velocity", хотя до некоторой степени идею сервлета-контроллера (который также нередко называют Front Servlet, Controller Servlet, etc.) саму по себе уже можно считать дизайн паттерном.
Если же говорить о том, какие из паттернов общего назначения могут пригодиться в реализации такого сервлета, то я бы назвал в первую очередь Command и Strategy. Command Команда - это достаточно простой компонент, который инкапсулирует выполнение некоего действия. Примерами могут служить всякие Task, Runnable, Action и пр. При этом он может принимать какие-то параметры и/или возвращать какие-то результаты, но это необязательно. Применительно к обсуждаемой задаче, такой компонент, по-видимому, должен как-то обработать входящий веб-запрос и, коль скоро речь идет о Velocity, сгенерировать некий выходной текст, для каковой цели ему придется выяснить, какой из имеющихся шаблонов (templates) он должен использовать, и подготовить в объекте типа VelocityContext все необходимые данные, которые понадобятся при рендеринге. Strategy Паттерн Стратегия служит для инкапсуляции в отдельном компоненте конкретной реализации некоторой функциональности. Этот патерн, к примеру, широко используется в Swing'е. Например механизм TableCellRenderer - это самая настоящая стратегия. Напиши свой рендерер, который будет выводить текст задом наперед, и получишь отличный компонент для Иврита В сервлете-контроллере место стратегии могло бы найтись, к примеру, в той части его логики, где он пытается определить, какой из имеющихся Commands должен обрабатывать тот или иной запрос на оснований инфы, доступной через Servlet API. Вот так вот, если в общих чертах. Если будут вопросы - задавай Это сообщение отредактировал(а) Stampede - 1.11.2006, 01:20 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Alexandr87 |
|
|||
дыкий псых Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 6 Всего: 39 |
Спасибо. Будем смотреть.
|
|||
|
||||
JUncle |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Поставьте пожалуйста плюс Stampede, сам я до этого еще не дорос.
Причина: не внял его словам о Velocity, позже к этому же пришел. Замечательная статья. Это сообщение отредактировал(а) JUncle - 7.11.2006, 14:25 --------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
tux |
|
|||
Летатель Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Без проблем
|
|||
|
||||
Бармалей |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
Скажите, а со времени написания статьи появились ли какие либо решения по интеграции Velocity с популярными IDE?
Это сообщение отредактировал(а) Бармалей - 8.11.2006, 17:14 |
|||
|
||||
tux |
|
|||
Летатель Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Скажем так, это самое слабое место Velocity. Есть пара плагинов для Eclipse и, практически, все.
|
|||
|
||||
Бармалей |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
Дайте, пожалуйста, ссылки на них. Просто Eclipse - моя любимая IDE. |
|||
|
||||
tux |
|
|||
Летатель Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
Бармалей |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
Спасибо.
|
|||
|
||||
tux |
|
|||
Летатель Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
После двух с половиной, не побоюсь этого слова, лет вышла очередная версия Velocity - 1.5 beta2. Качнуть можно здесь.
|
|||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Velocity cache - кеширует template как файл(сам исходник) или сам исходник + вставленные данные?
Это сообщение отредактировал(а) Tony - 29.12.2006, 18:31 |
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Когда Velocity в первый раз открывает файл шаблона, он его парсит и преобразует в свой внутренний формат, чтобы слияние (merge) с данными (контекстом) происходило побыстрее. Вот это вот внутреннее представление он и кэширует. А результат слияния - нет, не кэширует. |
|||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
А если сравнить с FreeMarker. Похоже что он уступает ему. Или я не прав?
|
|||
|
||||
Vofka |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 136 Регистрация: 21.6.2006 Репутация: 1 Всего: 1 |
У оракла есть плагин к JDeveloper работающий на velocity который генерит JSF+ADF страницы.
http://www.oracle.com/technology/consultin...JHeadstart.html Очень занятная вещь.мож кому полезно будет. |
|||
|
||||
Restavrator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2007 Репутация: 1 Всего: 1 |
Если я правильно понял, то использование velocity заставляет отказаться от тегов. Если это так, то это существенный минус по сравнению с JSP+JSTL. Например потому, что используя Acegi Security или тот же Spring Framework теги этих библиотек юзаются достаточно плотно. Или я не прав?
|
|||
|
||||
necromancer |
|
|||
Опытный Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
Присматрияваюсь я к этому Velocity, и все никак не могу найти очевидных плюсов.
1 если вам претит код в JSP - то его можно запретить специальной дерективой + проверка при автоматической сборке приложения. 2 Интерграция с многими достаточно популярными фреймворками хромает очень сильно 3 Мне лично не поянтно, если используется сложная логика в оотбражении, к примеру циклы, условия и прочее, то шаблон все равно выглядит мягко скажем некрасиво. 4 Тут упоминалось что отдал шаблон дизайнеру и сказал какие тэги, а можно пойти и от обратного, дизайнер отдал тебе шаблон и ты заменил нужные фрагменты на тэги, плюс я не совсем понимаю как дизайнер будет описывать таблицы с навигацией. 5 Как ни крути но скорость скомпилированного JSP всетаки выше чем постоянный прогон через шаблон. Я не спорю, что velocity полезная штука и находит свое применение. Но это к сожалению/счастью НЕ стандарт. Недавно столкнулся с проектом использующим Velocity для генерации jsp страниц, которые потом еще раз обрабатывались видимо внутренним движком. Реализовано все было жутко, поэтому беда плохого кода/страниц это не беда технологии это беда программистов ее использующих. Сейчас я довольно долгое время уже пишу на JSF, не скажу что все устраивает, но по крайней мере мне нравится. Velocity это все таки front-end, практически не затрагивающий серверную часть, многие как я понимаю, предпочитают использовать его вместе с Spring. Хотелось бы тут увидеть не описание вроде такого: ооо какой это крутой/хороший/замечательный фреймворк. А к примеру такое: на нем можно сделать такое и такое, зато к сожалению нельзя так то и так то. -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
Maksym |
|
|||
. Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Маленький камушек в огород jsp:
На jsp никогда не получишь точно-такого результата в html (посимвольно), как хотелось бы -- все равно какие-то пробелы, переносы строк на месте скриптов и т.п. мусор. При использовании jsf ситуация в этом смысле усугубляется. Понятное дело, что все более менее отлажено и браузеры допускают подобные вольности, они привыкли хавать и не такое, и при желании можно подчищать на выходе (хотя на практике этого никто не делает) но все же как то не кошерно.. На Velocity же получаешь именно то, что написал в шаблоне, в силу специфики технологии. |
|||
|
||||
PashaOvechkin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 1 Всего: 4 |
Маленький камушек в огород Velocity - как у етой технологии с reusability?
По моему reusability ето главный и определяющий плюс jsp/jsf над Velocity. |
|||
|
||||
Stampede |
|
|||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Тому, кто живет в стеклянном доме, не следует бросаться камнями. Древняя мудрость
Можно полюбопытствовать, о какой reusability мы говорим? Между проектами, между страницами одного веб приложения или еще какой-то другой? Так вот, смею заверить, что reusability вполне удовлетворительная, причем в распоряжении разрабатчика имеется целый ворох средств для ее достижения: от макросов и включаемых подшаблонов до самописных компонентов, которые сами умеют себя отрисовывать. В то время как в JSP включение одних страниц в другие (а) менее гибкое, (б) более накладное, за счет инициации дополнительных циклов обработки запроса, и (в) исключает возможность сколько-нибудь вразумительной стратегии обработки ошибок внутренних страниц. Так что см. эпиграф -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
PashaOvechkin |
|
|||
Опытный Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 1 Всего: 4 |
Stampede, спорить с Вами не возьмусь. Просто высказал мнение.
Участвовал в проетке, который создовался на базе Struts 1.3, и вйю часть была как раз на Velocity. Не могу сказать что было плохо... А сейчас создаём достаточно болшое веб приложение на JSF - испольсуем Trinidad имплементацию, а так же кое что из Tomohawk. Так вот... Думаю ето же приложение (что сейчас на JSF делаем) с велосити делалось бы раз так... Может в 5 дольше. Ето одно. Следующее - писать используя Velocity гораздо приятней, по скольку, как упомянул Maksym, что напишеш, то и будет Гораздо красивей ХТМЛ получается. Всё под твоим контролем. А какая именно reusability? В принципе обе упомяннутые. P.S А дом у меня не стеклянный ;) |
|||
|
||||
Maksym |
|
|||
. Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Соглашусь, что проигрыш во времени разработки на раннем этапе возможен, не в 5 раз конечно, а раза в 1.5. Но, думаю, это с лихвой окупится в дальнейшем развитии и поддержке. |
|||
|
||||
am_sasa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
Делаю вьюхи на XSLT, решил попробовать велосоти! как у него с мультипоточностью или он
|
|||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
A как же быть с custom tagami в velocity?
|
|||
|
||||
JUncle |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Tony, custom tags - вообще довольно спорная штука.
Лично я считаю, что ои не обеспечивают "чистого" подхода. --------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
Tony |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Ну как же тогда решить типовые зада4и? Кастом таги спровляутся с этим на ура. Но вапрос я ставил именно про Velocity a не jsp |
|||
|
||||
Shaggie |
|
|||
Опытный Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: 2 Всего: 72 |
Где-то странице на второй Stampede планировал дать подробный перечень минусов Velocity, но по неизвестным причинам так и не выложил материал. Возможно ли в ближайшее время возместить этот недостаток?
|
|||
|
||||
Maverick |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: 2 Всего: 10 |
Где должен лежать шаблон для того, чтобы его увидела прога из первого примера?
Я получаю это
Писано в Идее... шаблон лежит прямо рядом с классом... |
|||
|
||||
Maverick |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: 2 Всего: 10 |
Как вообще сконфигурировать, чтоб шаблоны брались из нужного места.... уже прямой путь указываю -все равно тоже самое...
Добавлено через 8 минут и 8 секунд
|
|||
|
||||
Stampede |
|
||||||||||||||
Гносеолог Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Shaggie, вопрос твой видел, да все как-то руки не доходили. А тут пришлось вплотную повозиться с Velocity, вот и решил по горячим следам отписаться. Итак, минусы... Во-первых, должен заметить: не такие уж это в общем и минусы, а так - где-то глючок, где-то бажок, где-то неудобство, где-то ограничение... Забегая вперед, сразу хочу сказать: ничего фатального там нет. Все можно обойти, порешать, извернуться. Но, конечно, лучше знать об этих "особенностях" заранее. Именно с этой целью: предупредить начинающего пользователя Velocity об имеющихся подводных граблях, я и пишу этот пост. Пойдем по порядку. 1. Некорректное сравнение чисел разных типов Действительно, водится такой грешок. Например, все литеральные целочисленные константы в шаблонах приводятся к типу Integer. Если мы попытаемся сравнить их с переменной типа long, то результат нас может маленько обесуражить:
Вопреки нашим ожиданиям, Velocity сообщит нам, что Нью Йорк - это деревня. А получается вот что: поскольку Long у них не сравнивается с Integer, то результатом сравнения будет false независимо от значений чисел. Спрашивается, что делать? Ну, прежде всего об этой "фиче" нужно знать. Тогда ее можно легко обойти. Например, написав собственный универсальный компаратор:
И теперь, заранее положив экземпляр компаратора в контекст (например, под именем "cmp") и исправив условие:
мы получим желаемый результат. Телемаркет! 2. Редактирование макросов на лету В Velocity есть такая удобная штука как автоподхват изменений, внесенных в файл с макросами. Контролируется это дело параметром velocimacro.library.autoreload. По умолчание стоит в true. К сожалению, при некоторых условиях эта штука не срабатывает, и бывает очень непонятно, когда ты что-то изменил, жмешь рефрешь, а изменений-то и не видно. В результате приходится перезапускать приложение. А дело, оказывается, в том, что если при парсинге макросов была встречена ошибка, то файл помечается как дефектный и на изменения больше не проверяется. Хотя вызовы макросов обрабатываются как ни в чем ни бывало! Хороша логика, да? Впрочем, кому щас легко... Между тем выход прост: добиваться, чтобы ошибок в файле макросов не было. Для этого надо грамотно настроить логирование и время от время чекать сообщения об ошибках. 3. Рекурсивный вызов макросов Увы, иногда бывает так, что все вроде работает хорошо, но ошибка при инициализации Velocity все-таки выскакивает, тем самым лишая нас возможности править макросы на лету (см. предыдущий пункт). Одна из печально известных ошибок такого рода - это парсинг макроса, содержащего рекурсию. В этом случае Velocity говорит нам: "too few arguments to macro". Спрашивается, можно ли это починить? Ответ - ДА! Надо просто взять более свежую версию движка. Начиная с Velocity v1.5. эта дурацкая ошибка не будет вас беспокоить. 4. Экранирование спецсимволов Иногда возникают ситуации, когда требуется записать строковую константу, в которой присутствуют кавычки или еще какие-нибудь спецсимволы. Вообще-то это происходит нечасто, потому что в большинстве случаев можно обойтись удобной фичей Velocity, позволяющей заключать строки на выбор в кавычки или в апострофы. Например:
Как видим, мы заключили строку в апострофы, и это позволило нам передать в некий макрос валидно оформленную HTML ссылку. Но я еще раз повторяю, это спасает не всегда. Как быть? А запросто. Надо просто определить переменную, значением которой является нужный символ, и подставлять ее там где надо. Вот смотрите:
Для нашего удобства в состав Velocity Tools входит штука под названием EscapeTool. В нем предусмотрены методы, которые возвращают всякие полезные спецсимволы. Если положить его экземпляр в контекст (скажем, под именем "esc"), то вставлять кракозябры в текст становится достаточно просто. Например, вот так мы выведем значок доллара:
Ну и еще EscapeTool может эскейпить УРЛы, строки Java, JavaScript, XML, вышивать крестиком и делать прочие полезные вещи. И таких полезных тулов там еще очень много. Ну а если для ваших изысканных нужд в тулбоксе ничего не нашлось, всегда можно написать самому. Тем более что это совсем нетрудно. Вот такой вот неполный, но, надеюсь, достаточно показательный перечень "минусов Velocity". Удачи в избегании граблей! Это сообщение отредактировал(а) Stampede - 3.10.2007, 20:15 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||||||||||||
|
|||||||||||||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
На минусы технологии этот перечень, действительно, не претендует.
Это сообщение отредактировал(а) batigoal - 3.10.2007, 20:17 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Shaggie |
|
|||
Опытный Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: 2 Всего: 72 |
Stampede, спасибо!
|
|||
|
||||
SuperFly |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
А я бы попросил накидать небольшой пример. Есть большой шаблон и есть шаблон новостей. Как теперь их обоих совместить? Думаю, пример бы многие споры присек.
|
|||
|
||||
ivg |
|
||||
Autonomous R&D Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Добавлю ещё 5 копеек 5. Доступ к элементу массива В шаблоне не нашел возможности получить элемент массива по индексу. То есть если в контекст положить new String[] {"One", "Two"}, то "One" в результирующем тексте не вывести. Обходное решение -> Arrays.asList("One", "Two"); тогда в шаблоне
Простейшая операция, ан нету. PS: Поправьте если ошибаюсь. |
||||
|
|||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
-------------------- Lost.... |
|||
|
||||
olegrolik |
|
|||
Опытный Профиль Группа: Участник Сообщений: 309 Регистрация: 25.1.2006 Репутация: нет Всего: нет |
Посмотрел исходники томката (6 ой версии). А точнее manager. Он реализован без одной jsp-страницы Куча print и println. Почему они не используют velocity? Сами же его написали Это сообщение отредактировал(а) olegrolik - 17.12.2007, 17:43 |
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
olegrolik,
я придумал три причины : 1) В предыдущих версиях было с принтл и зачем тогда менять? 2) Там все пару страничек, наверное, так сделано? Тогда зачем еще велосити подвязывать 3) К сорцам не нужно добавлять еще одну библиотеку (ну эта причина с 3й связана) -------------------- Lost.... |
|||
|
||||
diablero |
|
|||
Опытный Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Подскажите как экранировать присвоение.
Например, $one = $two, чтобы не видно было его. -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
-------------------- Lost.... |
|||
|
||||
hamsterKSU |
|
|||
Опытный Профиль Группа: Участник Сообщений: 401 Регистрация: 20.10.2006 Где: Украина, Херсон Репутация: 3 Всего: 11 |
||||
|
||||
SuperFly |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Хм, а у меня и с Velocity тоже не получается желаемого вывода: "все равно какие-то пробелы, переносы строк на месте скриптов и т.п. мусор." |
|||
|
||||
Maksym |
|
|||
. Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
||||
|
||||
Luminal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 28.1.2008 Репутация: нет Всего: нет |
Коллеги, а как все-таки с ненайденными ресурсами?
Тоже вот сейчас напоролся на эту же проблему. Как программе из самого первого примера сказать - откуда грузить "test.vm" ??? делал как Maverick - та же фигня... |
|||
|
||||
Luminal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 28.1.2008 Репутация: нет Всего: нет |
Кстати, я докопался, как запустить sample пример!
Это - проект на Intellij IDEA. При запуске, по крайней мере из IDE, все работает и выводит на экран то что нужно. Файл шаблона test.vm лежит в каталоге "\src" |
|||
|
||||
am_sasa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
Не могу проиндексировать массив, на $arr.get(0) выдает его же, a на $arr[0] выдает вообще коды адресов объектов.. подскажите как быть? |
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
В Велосити нельзя так.. 1) можно через foreach 2) использовать специальную VelocityTools - в данном случае ListTool -------------------- Lost.... |
|||
|
||||
am_sasa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
Я так и делал, но это криво... а за
и еще вопрос, про макросы... она все время пишет в консоль про не добавление в библиотеку, как вообще управлять ими ,а если они есть в другом шаблоне? как эту библиотеку правильно делать и когда загружать? |
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Нужно просто положить все шаблоны в один файл и прописать конфиг:
Файл лежить в >/WEB-INF/velocity/library/default.vm -------------------- Lost.... |
|||
|
||||
am_sasa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
||||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Спасибо -------------------- Lost.... |
|||
|
||||
am_sasa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
Осилил библиотеку, а вот русские буковки в ней не осилил... неужели придеца native2ascii юзать? может что получше есть? |
|||
|
||||
am_sasa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
все, осилил! надо
|
|||
|
||||
arrrght |
|
||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Всем привет!
Изучаю яву недавно - недели три. После долгого гугления пришёл к tomcat+spring+velocity. Проект разрабатываем на двоих - программер + дизайнер. Не могу разделить на две части проект - на java-часть и отображение(html+css+js) В web.xml прописал
В spring.xml
Т.е. все обрабатываемые шаблоны находятся в c:\web\*.html - здесь все нормально, берёт, работет - на ура. НО! На странице trtatata.html есть <link rel="stylesheet" type="text/css" href="css/common.css" /> Т.е. полная ссылка получается - http://localhost:8080/try9/css/common.css Вопрос: каким образом заставить tomcat чтобы он брал css/* не из корня веб-приложения, а конкретно из c:\web\css\* ?? Ещё одна проблема в том, что разрабатываем проект под Виндой, тестироваться он будет под линуксом, а работать, скорее всего, на Solaris. Т.е., в идеале я прописал бы к каком-нить конфиге, что корень web-а лежит не в c:\web, а, например, /var/www/web Это было-бы просто удобно - взял себе (домой) весь каталог c:\web, дома подредактировал, навел красоту, принёс на работу - положил обратно. |
||||
|
|||||
arrrght |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Нашёл два решения:
Первое - простое, но неэффективное Описание здесь же, на форуме Просто заменить Redir.class.getResourceAsStream на new FileInputStream Второе - попробовать скрестить apache httpd с tomcat-ом через mod_jserv или mod_jk Первое - работает без проблем Второе - надо возиться, с разбегу не получилось |
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
А чем вам стандартная структура проекта не нравится?
Типа такого: /MyProject --/WebContent ----/images ----/javascripts ----/css ----/WEB-INF ------/velocity-templates ------/lib ------web.xml ------springAppContext.xml -------------------- Lost.... |
|||
|
||||
arrrght |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 1.4.2008 Репутация: нет Всего: нет |
Я за полное разделение обязанностей ::)
Есть человек, который разбирается в верстке, дизайне, юзабилити, и.т.д, /web/* - это его Есть другой, который разбирается в кишках(java), классы* - это его. У каждого своя область ответственности - я уверен, что у меня ничего лишнего в web.xml не появится [ ::) ], более того - каталог /web/* можно отдать, например, стороннему дизайнеру. |
|||
|
||||
Емеля |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
||||
|
||||
webmolot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.4.2008 Репутация: нет Всего: нет |
Всем привет!
Подскажите, пожалуйста, где можно скачать мануал по velocity на русском языке. И какую нибудь литературу с простенькими примерами, для начала. Я - веб-дизайнер, хорошо владею html/css, хочу освоить velocity, чтобы програмеру облегчать жизнь. Спасибо! |
|||
|
||||
diablero |
|
|||
Опытный Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Народ, прошу прощения если такой вопрос звучал...
Как вообще запретить велосити вести свой лог? -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Maksym |
|
|||
. Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
diablero
Написать в velocity.properties конфиге runtime.log.logsystem.class=org.apache.velocity.runtime.log.NullLogSystem |
|||
|
||||
VetaleG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 17.6.2007 Репутация: нет Всего: 1 |
Добрый вечер.
У меня вопрос к гуру Velocity, ответ на который в документации я не нашёл. Допустим у меня есть шаблон, причём некоторая его часть генерируется динамически. Необходимо, чтобы весь текст этой части был перенесён в результирующий документ без изменений (т.е. строчка "#if($test)", как и строчка "$something", должна остаться собой). Простая замена символов '$' и '#' на "\$" и "\#" не помогла, т.к. Velocity оказалась чрезмерно на мой взгляд умной и переводила строчку "\${" в строчку "\${", т.к. в данном примере после доллара нет валидного имени переменной. Аналогично "\#ough" -> "\#ough". Решение, которое пришло в голову - принимать решение о том ставить '\' перед долларом (решёткой) или нет на основе анализа символов после этого доллара. Но на мой взгляд это сложно и не удобно. Есть ли другие способы решения проблемы? Может некий аналог блока "<![CDATA[ ... ]]>" из xml? (идеальный вариант, на мой взгляд) |
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Нет, такого нету я думаю. Можно взглянуть на Escape Tool, там есть методы для получения решетки, доллара и т.д. -------------------- Lost.... |
|||
|
||||
ivg |
|
|||
Autonomous R&D Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
||||
|
||||
VetaleG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 17.6.2007 Репутация: нет Всего: 1 |
ivg, не буду вдаваться в подробности, но мне нужен именно механизм ескейпинга некоторого абстрактного текста. Т.е. вопрос в следующем:
- есть набор символов на входе (текст) - мы его каким-то образом изменяем (ескейпим) - скармливаем изменённый текст Velocity в качестве шаблона - должны получить на выходе исходный текст при любом контексте. Тривиальным образом, я как понял, данная задача не решается. а жаль... Kangaroo, спасибо за ссылку. Escape Tool решает задачу лишь частично. (не проходит "при любом контексте", т.к. как минимум ${esc.d} будет в итоге запрешён для использования в "нормальной" части шаблона). По теме я бы записал "странный" эскейпинг в минусы велосити. Не очень понятно для чего нужно было так усложнять. Представьте себе ситуацию, когда писать в String '\\' или '\' зависело бы от того, какие символы следуют далее |
|||
|
||||
ivg |
|
|||
Autonomous R&D Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
VetaleG, наверно вы меня не поняли. Вот пример (все условия выполняются):
|
|||
|
||||
VetaleG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 17.6.2007 Репутация: нет Всего: 1 |
ivg, думаю класть в контекст, в котором и без того много мусора, рандомные сущности не очень хорошая идея. Понимаю, что возможность коллизии ничтожна, но всё же существует.
Временное решение, подсказанное Kangaroo, мне больше понравилось. Запретим дизайнерам использовать $escape.dollar и $escape.sharp и каждый доллар или решётку в их тексте будем заменять на ${$escape.dollar} и ${$escape.sharp} соответственно. Всем спасибо за помощь. |
|||
|
||||
qnub |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
у меня грабельки. есть шаблон velovcity:
$types равен:
и представляет собой TreeMap (важен порядок следования, при HashMap всё работает отлично) на выходе получается:
самое инстересное, что если изменить порядок следования элементов в $types на обратный то вывод будет такой:
куда копать? |
||||||||
|
|||||||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Попробовал. Работает Покажи как ты готовишь данные для велосити. И как у тебя получается порядок r,w,m,a (если это ТриМеп??) Это сообщение отредактировал(а) Kangaroo - 18.6.2008, 09:32 -------------------- Lost.... |
|||
|
||||
qnub |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
дерево берётся из файла XStream'ом. файл:
собсна порядок следования записей в файле и обуславливает порядок их в дереве. если использовать такой файл:
для загрузки в HashMap, то порядок рушится... :( но всё работает прошу заметить, что ключи выводятся все (value="r", и т.д.) а вот значения к нив пропадают... при выводе в лог дерева, уже после отдачи в контекст велосити, оно выводится полностью, т.е.:
... |
||||||
|
|||||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
qnub, попробуй сунуть ему в таком порядке:
И напиши, что получилось. -------------------- Lost.... |
|||
|
||||
qnub |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
сработало:
но здесь перепутаны r и w. мне если брать на оборот то нужно:
что даёт:
заковыка в "w"? если да, то в чём прикол? |
||||||
|
|||||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Смотри - у тебя получается TreeMap с ключами не в алфавитном порядке, а это противоествественно. Поэтому и .get() криво работает. Напиши свой компаратор, который будет выставлять ключам правильный порядок. Странно как XStream так добавляет в мапу, что получается бардак. -------------------- Lost.... |
|||
|
||||
qnub |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
ок. спасибо. буду доделывать
|
|||
|
||||
qnub |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
решил проблему:
компаратор писать не стал, ибо непонятно по каким критериям сравнивать позиции, а наиболее оптимальным является вариант произвольного задания поледовательности в файле в итоге сделал так. файл опций, загружаемый XStream'ом:
т.е. сортировка происходит по ключу, который является целым числом и сортируется по возрастанию. а значением является одномерный массив из двух компонентов, первый из которых - значение переменной, а второй её описание, понятное человеку. в итоге добавил в контекст ListTool для Velocity:
и, собсна, генератор списка выходит такой:
вобщем пользуйте, ежели кому нужно Это сообщение отредактировал(а) qnub - 19.6.2008, 07:59 |
||||||
|
|||||||
twilightDream |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.1.2008 Репутация: нет Всего: нет |
[QUOTE=pvo,3.11.2005, 09:47]
В ПШП такое давно есть. Можно сгенерировать страницу, затем делать с ней что угодно. Вообще. смотря на ситуацию глобально создается впечатление что ява в вэб программировании постепенно угасает, несмотря на старания, и в скором времени перекочует в мобильники. |
|||
|
||||
qnub |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
ОФФТОП
думаю не надо путать тёплое с мягким... ПХП неможет многое что может ява... кроме того тема не про то |
|||
|
||||
Platon |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 10 Всего: 40 |
twilightDream, я как представитель, побывавший в 2-х лагерях, делаю свой выбор в пользу Java
|
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Аффтар жжот -------------------- Lost.... |
|||
|
||||
twilightDream |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.1.2008 Репутация: нет Всего: нет |
В теме упоминалось PHP, а так же velocity шло в сравнении с JSP. Так что тема про веб программирование. Конечно, сравнивать JSP и velocity и этим ограничиться в рамках явы, это суть темы. Но так же и PHP может именно с сфере web-программирования ой как много, чего не может ява, или нужно писать специальные пакеты. Хотя.... Конечно тема не о том, Вы правы. Добавлено через 5 минут и 42 секунды
Я сейчас в двух лагерях. И выбор не сделал пока что. Хотя.... Если знаю, что проект будет включать в себя web-mail для пользователей, то всегда за яву голосую, потому как там не обойтись без кучи роботов, которые постоянно обрабатывают ящики, собирают почту, анализируют квоты, рассылают автоматические сообщения, автоответчики и т.д. на яве это удобней делать. А так PHP. |
||||
|
|||||
SectoR |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 52 Регистрация: 5.10.2005 Репутация: нет Всего: нет |
Читал сей топик долго и упорно...
и скажу следующее: 1. Поговаривают, что все Java-программисты покуривают травку?! (с) 2. Кощунство - это языки, которые заставляют программистов выполнять ненужную работу. Не расход машинного времени, а пустая трата времени программиста - вот истинная неэффективность. (с) 3. Ruby on Rails Это сообщение отредактировал(а) SectoR - 18.2.2009, 00:45 |
|||
|
||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Ложь! У нас просто железы специальные есть, каннабиатно-опиатные. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
sweety_kitty |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
привет! пробую ваш пример, а мне в ответ exception Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'test.vm'. Я прописала classpath до папки, содержащей velocity-template, проверила- копируются в компилированные папки классов. В чем причина?
Пользуюсь intellij idea. |
|||
|
||||
Spidometrs |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 20.5.2007 Репутация: нет Всего: нет |
В Velocity тоже не получишь чистый HTML. Обязательно будет мильён пробелов и переносов. Положение поправит подобный servlet Trim Filter |
|||
|
||||
Forsaken |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
Здравствуйте.
Собираюсь осваивать веб программирование для себя, вот незнаю что выбрать Velocity или Tapestry. Подскажите пожалуйста, если знаете.., насколько актуально изучение Velocity сегодня? |
|||
|
||||
garbuz |
|
|||
Опытный Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Думаю, что не стоит сравнивать Velocity и Tapestry, это технологии разного уровня. Первое - это движок шаблонов, второе - фрэймворк для разработки веб приложений. Советую начать с сервлетов и jsp, этого будет более чем достаточно для начинающего. |
|||
|
||||
Forsaken |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
garbuz
Спасибо Вам за ответ. Наверное действительно небуду забегать вперед, начну с jsp. Я просто читал о том, что Tapestry это некоторая помесь Struts+Velocity |
|||
|
||||
garbuz |
|
|||
Опытный Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
||||
|
||||
Forsaken |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 193 Регистрация: 30.12.2008 Репутация: нет Всего: 3 |
garbuz
Хорошо, сделаю как Вы советуете. Большое спасибо за помощь! |
|||
|
||||
x8m6 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 156 Регистрация: 11.12.2008 Репутация: нет Всего: нет |
Я правильно понимаю, что JSP и шаблонные движки используются только для того чтобы связать логику и дизайн. Почему тогда бы не использовать Wicket для этого всего? Ведь там получается "почти чистый" html.
|
|||
|
||||
jk1 |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 5 Всего: 75 |
x8m6, они решают разные задачи.
Wicket - фреймворк для построения web-приложений. В его задачи входит маршрутизация запросов, валидация, вызов логики. Velocity - движок шаблонов. Сами по себе шаблоны ничего не могут и не умеют - чистой воды представление. Некий код из web-уровня должен наполнить шаблон данными, движок шаблонов выполнит интерпретацию и тогда уже появится html-документ. Или не html: и JSP и Velocity подходят для формирования шаблонов XML документов, да и любых других, которые могут вам пригодиться. Более того, Velocity в отличие от Wicket можно с успехом применить в не-web-приложениях. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
Stolzen |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
А velocity позволяет делать наследование в шаблонах?
Вот как в django:
Кстати, попался мне под руки список template engines для java, может, кому-то будет полезно. http://java-source.net/open-source/template-engines И если не Velocity, то какой другой движок можно использовать для реализации такого наследования? Это сообщение отредактировал(а) Stolzen - 7.6.2011, 09:34 |
||||
|
|||||
Embedded |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 22.2.2011 Где: Россия Репутация: 1 Всего: 1 |
Stolzen,
В смысле наследование в шаблонах? Если я правильно тебя понял ты хочешь в шаблоне подключить другой шаблон, т.е. собрать главный шаблон из других шаблонов подключенных в нем в нужных местах. Если ты про это тогда, да... Velocity так может делать как два пальца... |
|||
|
||||
Stolzen |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Embedded,
Примерно так, да. Я говорю о том, что есть какой-то основной шаблон, и у него есть потомки, переопределяющие отображение в некоторых блоках. Получается просто и достаточно эффективно. Можно пример того, о чем вы говорите? |
|||
|
||||
Embedded |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 22.2.2011 Где: Россия Репутация: 1 Всего: 1 |
Stolzen,
Нет знаешь прямо так как ты сейчас описал в велосити не выйдет, выйдет иначе, может даже удобнее- если я правильно понял суть задачи... Ну вот например твой код:
Вот смотри что тут происходит я могу из моего ява кода передать любой объект в велосити, и он подставит любую строку какую я пожелаю в место переменной начинающейся с $ (например $title, $style или $content). Команда велосити #parse может подставить в шаблон содержимое любого другого шаблона так как будто он является частью этого. То есть я могу сделать так #parse(article.vm), а могу и вписать переменную $content как сделано у меня. Обычно когда пишут представление сайта на велосити, разделяют его на блоки скажем шапка, меню, подвал, контент и для каждого блока делают свой шаблон, затем собирают его в главном шаблоне как в моем примере выше я подключаю контент, тут появляется дополнительная гибкость.. можно в яве решать что и когда подключать.. Как бы тут наследования прямо такого нет, - выражаясь в терминах uml есть ассоциации. Это сообщение отредактировал(а) Embedded - 7.6.2011, 15:01 |
|||
|
||||
searoso |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 6.3.2014 Репутация: нет Всего: нет |
Нужно сверстать несколько шаблонов на Velocity. Пара маленьких сайтов, и один небольшой.
Кто умеет— напишите мне на почту или через jabber, плс. |
|||
|
||||
Правила форума "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. |