| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Набираем Velocity |
| Автор: Domestic Cat 10.3.2005, 07:00 | ||||||
| Консольное приложение в 1. Сначала нужно стянуть Велосити, версия 1.4: http://jakarta.apache.org/site/downloads/downloads_velocity-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 10.3.2005, 11:00 |
| Посмотрел на http://jakarta.apache.org/, что такое Velocity, но все равно не понял. Для чего используются эти шаблоны? |
| Автор: Domestic Cat 10.3.2005, 11:26 | ||
|
| Автор: batigoal 10.3.2005, 11:48 |
| Вот именно это я и не понял. Можно вызывать методы из текста страницы? Так это можно сделать и без использования сторонних технологий. Исходя из твоего примера, я так понял, что можно иметь готовый шаблон (который представляет из себя HTML, XML, SQL, текст и т.д.) и передавать в него значения переменных, получая таким образом документ, запрос и т.д. Но ведь точно так же мы можем сделать и в тексте обычной JSP. |
| Автор: Domestic Cat 10.3.2005, 11:57 |
| Текст обычной JSP - это Java код. Задача фреймворка состоит в том, чтобы презентацию сделать как можно более простой. Тогда за хтмл можно посадить обычного веб-дизайнера. Далее этот дизайнер делает супер-пупер страницу. Программист пишет бизнес логику. Они встречаются, и программер дает дизайнеру имена переменных. Дизайнер вставляет их в свою страницу, типа "Привет, $name". То есть, дизайнеру не нужно ничего знать о java или jsp. Кроме того, четкое отделение презентации от модели есть хорошо, и называется Модель 2 паттерн. |
| Автор: batigoal 10.3.2005, 12:29 | ||
Но ведь можно просто привести все к виду обычного HTML с включенными <%= name %>, или, в крайнем случае, с циклами или итераторами, и мы получим ту же самую изоляцию (хотя у меня пока сводить все к этому не получается |
| Автор: Sleepy_PIP 10.3.2005, 12:39 | ||
так задача UI интерфейса везеде и всегда - не просто выдать юзеру какой-то отчет, хоть он и прекрасно строится в терминах Velocity, но и получить реакцию от клиента. т.е. интерактив .... т.е. на лицо - в Velicity можно писать _выходные_ _отчеты_, не требующиее интеракива. Это конечно хорошо, но далеко не все, и к тому-ж проигрывает PDF отчетам. Ну все конечно ИМХО чайника |
| Автор: Domestic Cat 10.3.2005, 18:42 | ||
Нет такой серверной технологии, которая б давалa интерактив. А JavaScript или аналогичый клиентский скрипт / АктивХ / апплет никто не мешает пользовать. |
| Автор: Domestic Cat 14.3.2005, 10:11 | ||||||||||
Пример посерьезнее.
Запуск дает:
|
| Автор: Се ля ви 16.3.2005, 02:34 |
| Domestic Cat По-моему, довольно похожие облегченные конструкции встречались в спецификации JSP 2.0 - там тоже есть конструкции без традиционных "<%" и "%>" - можно их сравнить как-то? За топик большое спасибо) |
| Автор: Domestic Cat 16.3.2005, 02:52 | ||
Нет, Велосити - это template engine, jsp - это ява код внутри хтмла Велосити похож конечно, например, можно "вызывать методы" : $product.setPrice(55). Разница в том, что темпейт - файл vm парсится и все, jsp компилируется в класс и исполняется. В темплейтах нельзя определять методы. Зато можно делать макросы. |
| Автор: Zandr 1.4.2005, 11:00 | ||
Что ни начнешь писать - все компилятор получается... |
| Автор: Domestic Cat 2.4.2005, 23:17 | ||
А вообще, мощный шаблонный движок. |
| Автор: simanyay 21.5.2005, 15:55 |
| У меня вопрос: Какое преимущество, в плане производительности, даёт Velocity по сравнению с использованием JSP (<%= %>)? Просто я не до конца понимаю смысла Velocity для web-страниц. |
| Автор: simanyay 21.5.2005, 16:10 |
| Вопрос и сомнения вроде отпали. Советую всем, у кого такой же вопрос прочитать это: http://jakarta.apache.org/velocity/casestudy1.html Добавлено @ 16:12 Попробую, в общем курсовую написать используя Velocity. Авось и получится |
| Автор: batigoal 21.5.2005, 16:58 |
| А разве на JSTL этого нельзя сделать? |
| Автор: Stampede 21.5.2005, 17:58 | ||
Я могу (и хочу) много-много написать о том, почему Velocity раз так в восемьдесят пять лучше JSP, но мы сейчас уезжаем на длинные выходные в Банфф, так что вернусь не раньше понедельника. А тем, у кого есть неясности/сомнения, советую пока что погуглевать по слову IoC - inversion of control. Дело в том, что IoC - это не самый очевидный (и часто опускаемый в обсуждениях) аспект использования Velocity, но на мой взгляд это самое важное. До понедельника! |
| Автор: simanyay 21.5.2005, 18:14 | ||
Ждём-с с нетерпением |
| Автор: Chinook 27.5.2005, 01:09 | ||
Это как-то очень слабо напоминает HTML, и выучить это html-девелоперу никак не легче, чем библиотеки тегов, которые намного больше похожи на HTML. IMHO. |
| Автор: Stampede 7.6.2005, 23:43 | ||||||||||
| Ну. поехали... 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. В качестве примера того, как это видение получило практическую реализацию, можете взглянуть на мой сайт http://real-english.ru. Надеюсь, наш разговор о Velocity не закончен, и после вашей конструктивной критики мы продолжим обсуждение. До новых встреч в эфире! |
| Автор: Domestic Cat 8.6.2005, 00:09 |
| Хорошо! http://vingrad.ru/JAVA-JAV-002896 |
| Автор: simanyay 8.6.2005, 15:27 |
| |
| Автор: Souljah 28.9.2005, 10:59 |
| тов. Stampede не в первый раз радует меня трезвостью мышления поставьте плз + от моего имени, а то я еще не дорос до такого действа |
| Автор: batigoal 28.9.2005, 11:08 | ||
Это всегда пожалуйста. |
| Автор: pvo 21.10.2005, 22:19 |
| Velocity штука конечно хорошая. Но есть у нее пара изрядных минусов: 1. С рекурсией проблемы. Если передать в шаблон объект с "деревянной" структурой, то построить результирующий документ без танцев с бубнами не получится. (в версии 1.3, по крайней мере) 2. Скорость. Как не крути, но она меньше, чем у jsp. Компилятор-то пока-что не дописан ... |
| Автор: Stampede 22.10.2005, 01:35 | ||||||
Минусы, конечно, есть, но вот именно по поводу перечисленного - возражаю.
Что в данном случае понимается под рекурсией? Рекурсивный вызов макросов? Честно говоря, не знаю, не пробовал, но беглый поиск в гугле показывает, что с этим проблем быть не должно. Наоборот, там один чувак жалуется, что Velocity не ограничивает глубину рекурсии, из-за чего его программа иногда подвисает. Держите, говорит, меня семеро, а то если я разойдусь, так уж разойдусь
Я могу с цифрами в руках доказать, что разница как минимум несущественна, и что затраты времени на собственно рендеринг совершенно пустяковые. Помимо этого, я предлагаю поспорить на тему того, как общая архитектура веб приложения может быть значительно более критическим фактором в плане производительности, чем выбор той или иной технологии рендеринга. А про минусы я потом скажу отдельно |
| Автор: Ортхэннер 22.10.2005, 07:32 |
| М-да. А вы вот объясните, господа, чем, кроме синтаксиса, отличается Velocity от JSPX+JSTL. А то я немного не понимаю. Дело в том, что, как показывает практика, вставлять галимый Java-код в JSPX-страницы, мягко говоря, обломно. Если и получится - прочитать это точно будет потом нельзя. Но получается зачастую не с первого раза и выглядит жутко. А вот с библиотеками тегов и EL'ем - очень красиво и очень просто. |
| Автор: pvo 3.11.2005, 11:47 | ||
1. Гибкостью. Например, есть у нас Velocity & JSP шаблоны некоторой html страницы. В один прекрасный момент нам требуется отправить эту страницу по почте, причем не в процессе обслуживания запроса (ServletRequest не доступен). Что нужно будет делать в случае с jsp? \ В случае с велосити один и тот же код можно использовать и для генерации html, и для генерации email. 2. Обломно или не обломно добавлять java код в jsp страницы, но народ все равно упорно это делает. 3. Лаконичностью. ИМХО, понять шаблон velocity проще, нежели многие jsp шаблоны с использованием кучи кастом тегов ... |
| Автор: Guest 7.11.2005, 14:00 |
| То, что Velocity на порядок выше JSP - не вопрос! JSP - это дань старым и корявым технологиям, типа PHP, ASP и прочия... Но они решают свою нишу задач, типа быстро нацарапать сайт из 10 страниц с несложным функционалом. Для серьезных вещей уровня предприятия, такие движки не самый лучший выбор. Тут на сцену выходит Velocity и другие фрамеворки,а вот сравнивать его с другими технологиями и имеет смысл! Например, ХМЛ+ХСЛТ! Мое мнение, он тут проигрывает.... |
| Автор: Ортхэннер 8.11.2005, 06:19 | ||||
Да я вообще-то не про JSP, а про JSPX. Это несколько разные вещи с разным синтаксисом. И добавить код java в JSPX-страницу - задача довольно трудоёмкая. Ибо приходится все кавычки и знаки сравнения заменять соответствующими сущностями. Головняк ещё тот. К тому же, хоть убей, ты уже не сможешь задействовать выражения в атрибутах (типа <%=a%>). По поводу "кучи кастом тегов" - ну это скорее вопрос именования. Но вот первый пункт... принял. |
| Автор: Nobody 6.2.2006, 17:29 |
| Velocity - это, в отличие от JSP, совсем не обязательно серверная технология. |
| Автор: Се ля ви 16.5.2006, 16:18 |
| Тут вот по работе столкнулся-таки с велосити. В принципе штука удобная, но что огорчает, так это отсутствие типизации - чем-то мне отдалённо помесь JS и SSI напомнило. И так же огорчает отсутствие поддержки в средах разработки - например, не нашёл никакого путного плагина для IDEA. |
| Автор: Stampede 17.5.2006, 02:12 | ||||
Ну хорошо, давай пофантазируем, как выглядел бы синтаксис шаблонного движка, если бы он поддерживал типизацию. Допустим, мы имеем некую страницу интернет-магазина, которая использует следующие переменные:
Мы могли бы предусмотреть синтаксис для объявления переменных, что-то вроде:
Хорошо это было бы или плохо? Если сделать объявление опциональным (ведь движку все равно, есть объявление или нет: он ведь полагается на runtime информацию и рефлексию), то не исключено, что это была бы полезная фича: можно было бы написать плагин, который по крайней мере может делать:
Но он по-прежнему был бы бесполезен для контроля того, что все используемые переменные попадают в контекст, и причем под правильными именами, потому что эта инфа доступна только в рантайме. Но вот заставлять разработчика делать явные объявления - это будет уже насилие над личностью Если кто хочет отличиться, дарю идею бесплатно |
| Автор: Aazmandius 19.6.2006, 15:54 |
| А вот такой вопрос: можно ли шаблон включить внутрь другого шаблона? и что при этом делать с контекстами, которые в общем случае могут быть разными? Грубо говоря, например у нас есть шаблон, который описывает некую веб-страницу, он включает в себя хэдер, футер и др. области. Каждой из областей соответствует свой шаблон, который нужно вставить в нужное место шаблона страницы. Контексты у них допустим разные, возможно ли такое подключение? Вот нашел в документации: 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, 17:19 |
| Решение почти найдено |
| Автор: tux 21.6.2006, 01:32 | ||
А зачем его подключать? Будет использоваться контекст "корневого" шаблона. |
| Автор: Tony 16.10.2006, 08:17 |
| А можно ли перенести из sessionContext и aplicationContext в VelocityContext аттрибуты? Но не потупому 4ерз for . |
| Автор: Stampede 16.10.2006, 23:28 | ||
Смотря что имеется в виду: javax.ejb.SessionContext? А "aplicationContext" - это что за зверь? Класс из какого-то конкретного контейнера? Или просто некий общий контекст приложения? В принципе самое, пожалуй, универсальное решение - это написать обертку-адаптер, который будет имплементировать интерфейс org.apache.velocity.context.Context. Там всего пять методов, которые при реализации надо будет просто перенаправить подлежащему мапу или другому контексту: containsKey(), get(), getKeys(), put(), remove(). Но можно и по-деревянному, положить весь контекст в VelocityContext под своим именем и доступаться к его элементам, используя синтакс Velocity, например $applicationContext.get("someKey"); Понятно, что второй способ менее удобен, потому что в первом варианте мы бы обратились к этому же объекту просто как $someKey. |
| Автор: Tony 16.10.2006, 23:58 |
| Я имел в виду web.Скажем есть сервлет я беру sessionContext i servletContext в обоих есть аттрибуты.Как сделать 4тобы Velocity увидел их.Коне4но можно по тупоми через for перекладывать но ... |
| Автор: Tony 17.10.2006, 00:20 |
| решил так: Simple test: $test.id |
| Автор: Alexandr87 27.10.2006, 10:54 |
| есть какиендь шаблоны для сервлетов-контроллеров, использующих velocity? |
| Автор: rilio 28.10.2006, 19:23 | ||
Вот есть пример очень простого фреймворка на Velocity + AJAX: http://rilio.net/framework/ . Документация частично на русском. |
| Автор: Stampede 29.10.2006, 01:16 | ||
Не совсем понятно, имеются ли в виду шаблоны проектирования (design patterns), шаблоны вывода (templates) или что-то другое? Хотелось бы увидеть более четко сформулированный вопрос. |
| Автор: Alexandr87 31.10.2006, 10:47 |
| имено шаблоны проектирования. |
| Автор: Stampede 1.11.2006, 01:05 |
| Я не знаю, есть ли какие-то специальные design patterns для разработки именно "сервлетов-контроллеров, использующих velocity", хотя до некоторой степени идею сервлета-контроллера (который также нередко называют Front Servlet, Controller Servlet, etc.) саму по себе уже можно считать дизайн паттерном. Если же говорить о том, какие из паттернов общего назначения могут пригодиться в реализации такого сервлета, то я бы назвал в первую очередь Command и Strategy. Command Команда - это достаточно простой компонент, который инкапсулирует выполнение некоего действия. Примерами могут служить всякие Task, Runnable, Action и пр. При этом он может принимать какие-то параметры и/или возвращать какие-то результаты, но это необязательно. Применительно к обсуждаемой задаче, такой компонент, по-видимому, должен как-то обработать входящий веб-запрос и, коль скоро речь идет о Velocity, сгенерировать некий выходной текст, для каковой цели ему придется выяснить, какой из имеющихся шаблонов (templates) он должен использовать, и подготовить в объекте типа VelocityContext все необходимые данные, которые понадобятся при рендеринге. Strategy Паттерн Стратегия служит для инкапсуляции в отдельном компоненте конкретной реализации некоторой функциональности. Этот патерн, к примеру, широко используется в Swing'е. Например механизм TableCellRenderer - это самая настоящая стратегия. Напиши свой рендерер, который будет выводить текст задом наперед, и получишь отличный компонент для Иврита В сервлете-контроллере место стратегии могло бы найтись, к примеру, в той части его логики, где он пытается определить, какой из имеющихся Commands должен обрабатывать тот или иной запрос на оснований инфы, доступной через Servlet API. Вот так вот, если в общих чертах. Если будут вопросы - задавай |
| Автор: Alexandr87 1.11.2006, 06:06 |
| Спасибо. Будем смотреть. |
| Автор: JUncle 7.11.2006, 14:24 |
| Поставьте пожалуйста плюс Stampede, сам я до этого еще не дорос. Причина: не внял его словам о Velocity, позже к этому же пришел. Замечательная статья. |
| Автор: tux 7.11.2006, 14:37 |
| Без проблем |
| Автор: Бармалей 8.11.2006, 17:13 |
| Скажите, а со времени написания статьи появились ли какие либо решения по интеграции Velocity с популярными IDE? |
| Автор: tux 8.11.2006, 17:35 |
| Скажем так, это самое слабое место Velocity. Есть пара плагинов для Eclipse и, практически, все. |
| Автор: Бармалей 8.11.2006, 18:09 | ||
Дайте, пожалуйста, ссылки на них. Просто Eclipse - моя любимая IDE. |
| Автор: tux 8.11.2006, 18:15 |
| http://velocitywebedit.sourceforge.net/ http://propsorter.sourceforge.net/veloeclipse/ |
| Автор: Бармалей 8.11.2006, 18:34 |
| Спасибо. |
| Автор: tux 11.12.2006, 13:48 |
| После двух с половиной, не побоюсь этого слова, лет вышла очередная версия Velocity - 1.5 beta2. Качнуть можно http://www.apache.org/dist/jakarta/velocity/beta/velocity-1.5-beta2/. |
| Автор: Tony 29.12.2006, 18:28 |
| Velocity cache - кеширует template как файл(сам исходник) или сам исходник + вставленные данные? |
| Автор: Stampede 30.12.2006, 23:52 | ||
Когда Velocity в первый раз открывает файл шаблона, он его парсит и преобразует в свой внутренний формат, чтобы слияние (merge) с данными (контекстом) происходило побыстрее. Вот это вот внутреннее представление он и кэширует. А результат слияния - нет, не кэширует. |
| Автор: Tony 9.1.2007, 01:34 |
| А если сравнить с FreeMarker. Похоже что он уступает ему. Или я не прав? |
| Автор: Vofka 9.3.2007, 14:46 |
| У оракла есть плагин к JDeveloper работающий на velocity который генерит JSF+ADF страницы. http://www.oracle.com/technology/consulting/9iServices/JHeadstart.html Очень занятная вещь.мож кому полезно будет. |
| Автор: Restavrator 11.7.2007, 16:08 |
| Если я правильно понял, то использование velocity заставляет отказаться от тегов. Если это так, то это существенный минус по сравнению с JSP+JSTL. Например потому, что используя Acegi Security или тот же Spring Framework теги этих библиотек юзаются достаточно плотно. Или я не прав? |
| Автор: necromancer 24.7.2007, 14:31 |
| Присматрияваюсь я к этому Velocity, и все никак не могу найти очевидных плюсов. 1 если вам претит код в JSP - то его можно запретить специальной дерективой + проверка при автоматической сборке приложения. 2 Интерграция с многими достаточно популярными фреймворками хромает очень сильно 3 Мне лично не поянтно, если используется сложная логика в оотбражении, к примеру циклы, условия и прочее, то шаблон все равно выглядит мягко скажем некрасиво. 4 Тут упоминалось что отдал шаблон дизайнеру и сказал какие тэги, а можно пойти и от обратного, дизайнер отдал тебе шаблон и ты заменил нужные фрагменты на тэги, плюс я не совсем понимаю как дизайнер будет описывать таблицы с навигацией. 5 Как ни крути но скорость скомпилированного JSP всетаки выше чем постоянный прогон через шаблон. Я не спорю, что velocity полезная штука и находит свое применение. Но это к сожалению/счастью НЕ стандарт. Недавно столкнулся с проектом использующим Velocity для генерации jsp страниц, которые потом еще раз обрабатывались видимо внутренним движком. Реализовано все было жутко, поэтому беда плохого кода/страниц это не беда технологии это беда программистов ее использующих. Сейчас я довольно долгое время уже пишу на JSF, не скажу что все устраивает, но по крайней мере мне нравится. Velocity это все таки front-end, практически не затрагивающий серверную часть, многие как я понимаю, предпочитают использовать его вместе с Spring. Хотелось бы тут увидеть не описание вроде такого: ооо какой это крутой/хороший/замечательный фреймворк. А к примеру такое: на нем можно сделать такое и такое, зато к сожалению нельзя так то и так то. |
| Автор: Maksym 24.7.2007, 14:58 |
| Маленький камушек в огород jsp: На jsp никогда не получишь точно-такого результата в html (посимвольно), как хотелось бы -- все равно какие-то пробелы, переносы строк на месте скриптов и т.п. мусор. При использовании jsf ситуация в этом смысле усугубляется. Понятное дело, что все более менее отлажено и браузеры допускают подобные вольности, они привыкли хавать и не такое, и при желании можно подчищать на выходе (хотя на практике этого никто не делает) но все же как то не кошерно.. На Velocity же получаешь именно то, что написал в шаблоне, в силу специфики технологии. |
| Автор: PashaOvechkin 26.7.2007, 20:52 |
| Маленький камушек в огород Velocity - как у етой технологии с reusability? По моему reusability ето главный и определяющий плюс jsp/jsf над Velocity. |
| Автор: Stampede 26.7.2007, 21:20 | ||
Тому, кто живет в стеклянном доме, не следует бросаться камнями. Древняя мудрость
Можно полюбопытствовать, о какой reusability мы говорим? Между проектами, между страницами одного веб приложения или еще какой-то другой? Так вот, смею заверить, что reusability вполне удовлетворительная, причем в распоряжении разрабатчика имеется целый ворох средств для ее достижения: от макросов и включаемых подшаблонов до самописных компонентов, которые сами умеют себя отрисовывать. В то время как в JSP включение одних страниц в другие (а) менее гибкое, (б) более накладное, за счет инициации дополнительных циклов обработки запроса, и (в) исключает возможность сколько-нибудь вразумительной стратегии обработки ошибок внутренних страниц. Так что см. эпиграф |
| Автор: PashaOvechkin 26.7.2007, 22:03 |
| Stampede, спорить с Вами не возьмусь. Просто высказал мнение. Участвовал в проетке, который создовался на базе Struts 1.3, и вйю часть была как раз на Velocity. Не могу сказать что было плохо... А сейчас создаём достаточно болшое веб приложение на JSF - испольсуем Trinidad имплементацию, а так же кое что из Tomohawk. Так вот... Думаю ето же приложение (что сейчас на JSF делаем) с велосити делалось бы раз так... Может в 5 дольше. Ето одно. Следующее - писать используя Velocity гораздо приятней, по скольку, как упомянул Maksym, что напишеш, то и будет Гораздо красивей ХТМЛ получается. Всё под твоим контролем. А какая именно reusability? В принципе обе упомяннутые. P.S А дом у меня не стеклянный ;) |
| Автор: Maksym 27.7.2007, 10:21 | ||
Соглашусь, что проигрыш во времени разработки на раннем этапе возможен, не в 5 раз конечно, а раза в 1.5. Но, думаю, это с лихвой окупится в дальнейшем развитии и поддержке. |
| Автор: am_sasa 30.7.2007, 09:42 | ||
Делаю вьюхи на XSLT, решил попробовать велосоти! как у него с мультипоточностью или он
|
| Автор: Tony 12.8.2007, 18:47 |
| A как же быть с custom tagami в velocity? |
| Автор: JUncle 12.8.2007, 19:10 |
| Tony, custom tags - вообще довольно спорная штука. Лично я считаю, что ои не обеспечивают "чистого" подхода. |
| Автор: Tony 12.8.2007, 22:31 | ||
Ну как же тогда решить типовые зада4и? Кастом таги спровляутся с этим на ура. Но вапрос я ставил именно про Velocity a не jsp |
| Автор: Shaggie 29.8.2007, 07:50 |
| Где-то странице на второй Stampede планировал дать подробный перечень минусов Velocity, но по неизвестным причинам так и не выложил материал. Возможно ли в ближайшее время возместить этот недостаток? |
| Автор: Maverick 25.9.2007, 16:30 | ||
| Где должен лежать шаблон для того, чтобы его увидела прога из первого примера? Я получаю это
Писано в Идее... шаблон лежит прямо рядом с классом... |
| Автор: Maverick 25.9.2007, 16:59 | ||
| Как вообще сконфигурировать, чтоб шаблоны брались из нужного места.... уже прямой путь указываю -все равно тоже самое... Добавлено через 8 минут и 8 секунд
|
| Автор: Stampede 3.10.2007, 20:11 | ||||||||||||||||
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, вышивать крестиком и делать прочие полезные вещи. И таких полезных тулов http://velocity.apache.org/tools/devel/. Ну а если для ваших изысканных нужд в тулбоксе ничего не нашлось, всегда можно написать самому. Тем более что это совсем нетрудно. Вот такой вот неполный, но, надеюсь, достаточно показательный перечень "минусов Velocity". Удачи в избегании граблей! |
| Автор: batigoal 3.10.2007, 20:17 |
| На минусы технологии этот перечень, действительно, не претендует. |
| Автор: Shaggie 4.10.2007, 06:14 |
| Stampede, спасибо! |
| Автор: SuperFly 20.11.2007, 11:06 |
| А я бы попросил накидать небольшой пример. Есть большой шаблон и есть шаблон новостей. Как теперь их обоих совместить? Думаю, пример бы многие споры присек. |
| Автор: ivg 25.11.2007, 01:05 | ||||
Добавлю ещё 5 копеек 5. Доступ к элементу массива В шаблоне не нашел возможности получить элемент массива по индексу. То есть если в контекст положить new String[] {"One", "Two"}, то "One" в результирующем тексте не вывести. Обходное решение -> Arrays.asList("One", "Two"); тогда в шаблоне
Простейшая операция, ан нету. PS: Поправьте если ошибаюсь. |
| Автор: Kangaroo 25.11.2007, 01:17 |
Не ошибаетесь. Но всегда есть Velocity Tools |
| Автор: olegrolik 17.12.2007, 17:43 |
| Посмотрел исходники томката (6 ой версии). А точнее manager. Он реализован без одной jsp-страницы Почему они не используют velocity? Сами же его написали |
| Автор: Kangaroo 18.12.2007, 10:59 |
| olegrolik, я придумал три причины 1) В предыдущих версиях было с принтл и зачем тогда менять? 2) Там все пару страничек, наверное, так сделано? Тогда зачем еще велосити подвязывать 3) К сорцам не нужно добавлять еще одну библиотеку (ну эта причина с 3й связана) |
| Автор: diablero 25.12.2007, 01:11 |
| Подскажите как экранировать присвоение. Например, $one = $two, чтобы не видно было его. |
| Автор: Kangaroo 25.12.2007, 01:20 |
Это как? Может #set подойдет? |
| Автор: hamsterKSU 16.1.2008, 16:04 |
| читайте маны сначала: http://velocity.apache.org/engine/devel/user-guide.html |
| Автор: SuperFly 17.1.2008, 11:33 | ||
Хм, а у меня и с Velocity тоже не получается желаемого вывода: "все равно какие-то пробелы, переносы строк на месте скриптов и т.п. мусор." |
| Автор: Maksym 17.1.2008, 16:22 | ||
То есть результат не соответствует шаблону? Интересно.. можно примерчик? |
| Автор: Luminal 28.1.2008, 18:36 |
| Коллеги, а как все-таки с ненайденными ресурсами? Тоже вот сейчас напоролся на эту же проблему. Как программе из самого первого примера сказать - откуда грузить "test.vm" ??? делал как Maverick - та же фигня... |
| Автор: Luminal 31.1.2008, 13:12 | ||
Кстати, я докопался, как запустить sample пример!
Это - проект на Intellij IDEA. При запуске, по крайней мере из IDE, все работает и выводит на экран то что нужно. Файл шаблона test.vm лежит в каталоге "\src" |
| Автор: am_sasa 7.2.2008, 11:28 |
Не могу проиндексировать массив, на $arr.get(0) выдает его же, a на $arr[0] выдает вообще коды адресов объектов.. подскажите как быть? |
| Автор: Kangaroo 8.2.2008, 00:32 | ||
В Велосити нельзя так.. 1) можно через foreach 2) использовать специальную VelocityTools - в данном случае http://velocity.apache.org/tools/releases/1.4/javadoc/org/apache/velocity/tools/generic/ListTool.html |
| Автор: am_sasa 15.2.2008, 09:52 | ||
Я так и делал, но это криво... а за
и еще вопрос, про макросы... она все время пишет в консоль про не добавление в библиотеку, как вообще управлять ими ,а если они есть в другом шаблоне? как эту библиотеку правильно делать и когда загружать? |
| Автор: Kangaroo 15.2.2008, 10:22 | ||||
Нужно просто положить все шаблоны в один файл и прописать конфиг:
Файл лежить в >/WEB-INF/velocity/library/default.vm |
| Автор: am_sasa 15.2.2008, 11:03 |
| Спасибо! сильно благодарен, буду пробовать))) Поставил в тебе пятерку!!! |
| Автор: Kangaroo 15.2.2008, 13:53 | ||
Спасибо |
| Автор: am_sasa 18.2.2008, 13:59 |
Осилил библиотеку, а вот русские буковки в ней не осилил... неужели придеца native2ascii юзать? может что получше есть? |
| Автор: am_sasa 18.2.2008, 14:56 | ||
все, осилил! надо
|
| Автор: arrrght 1.4.2008, 07:27 | ||||
| Всем привет! Изучаю яву недавно - недели три. После долгого гугления пришёл к 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 2.4.2008, 10:57 |
| Нашёл два решения: Первое - простое, но неэффективное http://forum.vingrad.ru/index.php?showtopic=136336&view=findpost&p=1071182 Просто заменить Redir.class.getResourceAsStream на new FileInputStream Второе - попробовать скрестить apache httpd с tomcat-ом через mod_jserv или http://tomcat.apache.org/connectors-doc/ Первое - работает без проблем Второе - надо возиться, с разбегу не получилось |
| Автор: Kangaroo 2.4.2008, 11:19 |
| А чем вам стандартная структура проекта не нравится? Типа такого: /MyProject --/WebContent ----/images ----/javascripts ----/css ----/WEB-INF ------/velocity-templates ------/lib ------web.xml ------springAppContext.xml |
| Автор: arrrght 2.4.2008, 12:23 |
| Я за полное разделение обязанностей ::) Есть человек, который разбирается в верстке, дизайне, юзабилити, и.т.д, /web/* - это его Есть другой, который разбирается в кишках(java), классы* - это его. У каждого своя область ответственности - я уверен, что у меня ничего лишнего в web.xml не появится [ ::) ], более того - каталог /web/* можно отдать, например, стороннему дизайнеру. |
| Автор: Емеля 5.4.2008, 15:59 | ||
arrrght,
Привет, я как то в похожей ситуации использовал: application.getRealPath("/").toString(); Попробуй. |
| Автор: webmolot 10.4.2008, 13:04 |
| Всем привет! Подскажите, пожалуйста, где можно скачать мануал по velocity на русском языке. И какую нибудь литературу с простенькими примерами, для начала. Я - веб-дизайнер, хорошо владею html/css, хочу освоить velocity, чтобы програмеру облегчать жизнь. Спасибо! |
| Автор: diablero 30.4.2008, 01:06 |
| Народ, прошу прощения если такой вопрос звучал... Как вообще запретить велосити вести свой лог? |
| Автор: Maksym 30.4.2008, 01:33 |
| diablero Написать в velocity.properties конфиге runtime.log.logsystem.class=org.apache.velocity.runtime.log.NullLogSystem |
| Автор: VetaleG 10.5.2008, 18:05 |
| Добрый вечер. У меня вопрос к гуру Velocity, ответ на который в документации я не нашёл. Допустим у меня есть шаблон, причём некоторая его часть генерируется динамически. Необходимо, чтобы весь текст этой части был перенесён в результирующий документ без изменений (т.е. строчка "#if($test)", как и строчка "$something", должна остаться собой). Простая замена символов '$' и '#' на "\$" и "\#" не помогла, т.к. Velocity оказалась чрезмерно на мой взгляд умной и переводила строчку "\${" в строчку "\${", т.к. в данном примере после доллара нет валидного имени переменной. Аналогично "\#ough" -> "\#ough". Решение, которое пришло в голову - принимать решение о том ставить '\' перед долларом (решёткой) или нет на основе анализа символов после этого доллара. Но на мой взгляд это сложно и не удобно. Есть ли другие способы решения проблемы? Может некий аналог блока "<![CDATA[ ... ]]>" из xml? (идеальный вариант, на мой взгляд) |
| Автор: Kangaroo 10.5.2008, 19:08 | ||
Нет, такого нету я думаю. Можно взглянуть на http://velocity.apache.org/tools/releases/1.4/generic/EscapeTool.html, там есть методы для получения решетки, доллара и т.д. |
| Автор: ivg 12.5.2008, 13:09 | ||
VetaleG, так и используйте Velocity. Это ж очевидно, или я чего то не понял?
Вставляете в шаблон переменную, её значением и будет ? |
| Автор: VetaleG 13.5.2008, 21:26 |
| ivg, не буду вдаваться в подробности, но мне нужен именно механизм ескейпинга некоторого абстрактного текста. Т.е. вопрос в следующем: - есть набор символов на входе (текст) - мы его каким-то образом изменяем (ескейпим) - скармливаем изменённый текст Velocity в качестве шаблона - должны получить на выходе исходный текст при любом контексте. Тривиальным образом, я как понял, данная задача не решается. а жаль... Kangaroo, спасибо за ссылку. Escape Tool решает задачу лишь частично. (не проходит "при любом контексте", т.к. как минимум ${esc.d} будет в итоге запрешён для использования в "нормальной" части шаблона). По теме я бы записал "странный" эскейпинг в минусы велосити. Не очень понятно для чего нужно было так усложнять. Представьте себе ситуацию, когда писать в String '\\' или '\' зависело бы от того, какие символы следуют далее |
| Автор: ivg 13.5.2008, 23:18 | ||
VetaleG, наверно вы меня не поняли. Вот пример (все условия выполняются):
|
| Автор: VetaleG 14.5.2008, 10:37 |
| ivg, думаю класть в контекст, в котором и без того много мусора, рандомные сущности не очень хорошая идея. Понимаю, что возможность коллизии ничтожна, но всё же существует. Временное решение, подсказанное Kangaroo, мне больше понравилось. Запретим дизайнерам использовать $escape.dollar и $escape.sharp и каждый доллар или решётку в их тексте будем заменять на ${$escape.dollar} и ${$escape.sharp} соответственно. Всем спасибо за помощь. |
| Автор: qnub 18.6.2008, 08:01 | ||||||||
у меня грабельки. есть шаблон velovcity:
$types равен:
и представляет собой TreeMap (важен порядок следования, при HashMap всё работает отлично) на выходе получается:
самое инстересное, что если изменить порядок следования элементов в $types на обратный то вывод будет такой:
куда копать? |
| Автор: Kangaroo 18.6.2008, 09:32 |
Попробовал. Работает Покажи как ты готовишь данные для велосити. И как у тебя получается порядок r,w,m,a (если это ТриМеп??) |
| Автор: qnub 18.6.2008, 09:54 | ||||||
дерево берётся из файла XStream'ом. файл:
собсна порядок следования записей в файле и обуславливает порядок их в дереве. если использовать такой файл:
для загрузки в HashMap, то порядок рушится... :( но всё работает прошу заметить, что ключи выводятся все (value="r", и т.д.) а вот значения к нив пропадают... при выводе в лог дерева, уже после отдачи в контекст велосити, оно выводится полностью, т.е.:
... |
| Автор: Kangaroo 18.6.2008, 10:00 | ||
qnub, попробуй сунуть ему в таком порядке:
И напиши, что получилось. |
| Автор: qnub 18.6.2008, 10:06 | ||||||
сработало:
но здесь перепутаны r и w. мне если брать на оборот то нужно:
что даёт:
заковыка в "w"? если да, то в чём прикол? |
| Автор: Kangaroo 18.6.2008, 10:23 |
Смотри - у тебя получается TreeMap с ключами не в алфавитном порядке, а это противоествественно. Поэтому и .get() криво работает. Напиши свой компаратор, который будет выставлять ключам правильный порядок. Странно как XStream так добавляет в мапу, что получается бардак. |
| Автор: qnub 18.6.2008, 10:27 |
| ок. спасибо. буду доделывать |
| Автор: qnub 19.6.2008, 07:59 | ||||||
| решил проблему: компаратор писать не стал, ибо непонятно по каким критериям сравнивать позиции, а наиболее оптимальным является вариант произвольного задания поледовательности в файле в итоге сделал так. файл опций, загружаемый XStream'ом:
т.е. сортировка происходит по ключу, который является целым числом и сортируется по возрастанию. а значением является одномерный массив из двух компонентов, первый из которых - значение переменной, а второй её описание, понятное человеку. в итоге добавил в контекст ListTool для Velocity:
и, собсна, генератор списка выходит такой:
вобщем пользуйте, ежели кому нужно |
| Автор: twilightDream 4.8.2008, 13:54 | ||
[QUOTE=pvo,3.11.2005, 09:47]
В ПШП такое давно есть. Можно сгенерировать страницу, затем делать с ней что угодно. Вообще. смотря на ситуацию глобально создается впечатление что ява в вэб программировании постепенно угасает, несмотря на старания, и в скором времени перекочует в мобильники. |
| Автор: qnub 4.8.2008, 14:04 |
| ОФФТОП думаю не надо путать тёплое с мягким... ПХП неможет многое что может ява... кроме того тема не про то |
| Автор: Platon 4.8.2008, 14:14 |
| twilightDream, я как представитель, побывавший в 2-х лагерях, делаю свой выбор в пользу Java |
| Автор: Kangaroo 4.8.2008, 14:22 | ||
Аффтар жжот |
| Автор: twilightDream 4.8.2008, 15:44 | ||||
В теме упоминалось PHP, а так же velocity шло в сравнении с JSP. Так что тема про веб программирование. Конечно, сравнивать JSP и velocity и этим ограничиться в рамках явы, это суть темы. Но так же и PHP может именно с сфере web-программирования ой как много, чего не может ява, или нужно писать специальные пакеты. Хотя.... Конечно тема не о том, Вы правы. Добавлено через 5 минут и 42 секунды
Я сейчас в двух лагерях. И выбор не сделал пока что. Хотя.... Если знаю, что проект будет включать в себя web-mail для пользователей, то всегда за яву голосую, потому как там не обойтись без кучи роботов, которые постоянно обрабатывают ящики, собирают почту, анализируют квоты, рассылают автоматические сообщения, автоответчики и т.д. на яве это удобней делать. А так PHP. |
| Автор: SectoR 17.2.2009, 23:30 |
| Читал сей топик долго и упорно... и скажу следующее: 1. Поговаривают, что все Java-программисты покуривают травку?! (с) 2. Кощунство - это языки, которые заставляют программистов выполнять ненужную работу. Не расход машинного времени, а пустая трата времени программиста - вот истинная неэффективность. (с) 3. Ruby on Rails |
| Автор: batigoal 18.2.2009, 00:15 |
Ложь! У нас просто железы специальные есть, каннабиатно-опиатные. |
| Автор: sweety_kitty 19.2.2009, 14:46 |
| привет! пробую ваш пример, а мне в ответ exception Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'test.vm'. Я прописала classpath до папки, содержащей velocity-template, проверила- копируются в компилированные папки классов. В чем причина? Пользуюсь intellij idea. |
| Автор: Spidometrs 7.4.2009, 01:09 | ||
В Velocity тоже не получишь чистый HTML. Обязательно будет мильён пробелов и переносов. Положение поправит подобный servlet http://www.servletsuite.com/servlets/trimflt.htm |
| Автор: Forsaken 22.2.2010, 13:23 |
| Здравствуйте. Собираюсь осваивать веб программирование для себя, вот незнаю что выбрать Velocity или Tapestry. Подскажите пожалуйста, если знаете.., насколько актуально изучение Velocity сегодня? |
| Автор: garbuz 22.2.2010, 15:18 | ||
Думаю, что не стоит сравнивать Velocity и Tapestry, это технологии разного уровня. Первое - это движок шаблонов, второе - фрэймворк для разработки веб приложений. Советую начать с сервлетов и jsp, этого будет более чем достаточно для начинающего. |
| Автор: Forsaken 22.2.2010, 15:57 |
| garbuz Спасибо Вам за ответ. Наверное действительно небуду забегать вперед, начну с jsp. Я просто читал о том, что Tapestry это некоторая помесь Struts+Velocity |
| Автор: garbuz 22.2.2010, 18:40 | ||
Только не с голых jsp, а обязательно вместе с сервлетами, не повторяйте ошибки многих.
Я бы не сказал. |
| Автор: Forsaken 22.2.2010, 22:15 |
| garbuz Хорошо, сделаю как Вы советуете. Большое спасибо за помощь! |
| Автор: x8m6 26.6.2010, 00:16 |
| Я правильно понимаю, что JSP и шаблонные движки используются только для того чтобы связать логику и дизайн. Почему тогда бы не использовать Wicket для этого всего? Ведь там получается "почти чистый" html. |
| Автор: jk1 26.6.2010, 08:11 |
| x8m6, они решают разные задачи. Wicket - фреймворк для построения web-приложений. В его задачи входит маршрутизация запросов, валидация, вызов логики. Velocity - движок шаблонов. Сами по себе шаблоны ничего не могут и не умеют - чистой воды представление. Некий код из web-уровня должен наполнить шаблон данными, движок шаблонов выполнит интерпретацию и тогда уже появится html-документ. Или не html: и JSP и Velocity подходят для формирования шаблонов XML документов, да и любых других, которые могут вам пригодиться. Более того, Velocity в отличие от Wicket можно с успехом применить в не-web-приложениях. |
| Автор: Stolzen 7.6.2011, 09:33 | ||||
| А velocity позволяет делать наследование в шаблонах? Вот как в django:
Кстати, попался мне под руки список template engines для java, может, кому-то будет полезно. http://java-source.net/open-source/template-engines И если не Velocity, то какой другой движок можно использовать для реализации такого наследования? |
| Автор: Embedded 7.6.2011, 14:37 |
| Stolzen, В смысле наследование в шаблонах? Если я правильно тебя понял ты хочешь в шаблоне подключить другой шаблон, т.е. собрать главный шаблон из других шаблонов подключенных в нем в нужных местах. Если ты про это тогда, да... Velocity так может делать как два пальца... |
| Автор: Stolzen 7.6.2011, 14:41 |
| Embedded, Примерно так, да. Я говорю о том, что есть какой-то основной шаблон, и у него есть потомки, переопределяющие отображение в некоторых блоках. Получается просто и достаточно эффективно. Можно пример того, о чем вы говорите? |
| Автор: Embedded 7.6.2011, 14:54 | ||
| Stolzen, Нет знаешь прямо так как ты сейчас описал в велосити не выйдет, выйдет иначе, может даже удобнее- если я правильно понял суть задачи... Ну вот например твой код:
Вот смотри что тут происходит я могу из моего ява кода передать любой объект в велосити, и он подставит любую строку какую я пожелаю в место переменной начинающейся с $ (например $title, $style или $content). Команда велосити #parse может подставить в шаблон содержимое любого другого шаблона так как будто он является частью этого. То есть я могу сделать так #parse(article.vm), а могу и вписать переменную $content как сделано у меня. Обычно когда пишут представление сайта на велосити, разделяют его на блоки скажем шапка, меню, подвал, контент и для каждого блока делают свой шаблон, затем собирают его в главном шаблоне как в моем примере выше я подключаю контент, тут появляется дополнительная гибкость.. можно в яве решать что и когда подключать.. Как бы тут наследования прямо такого нет, - выражаясь в терминах uml есть ассоциации. |
| Автор: searoso 6.3.2014, 17:38 |
| Нужно сверстать несколько шаблонов на Velocity. Пара маленьких сайтов, и один небольшой. Кто умеет— напишите мне на почту или через jabber, плс. |