Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Набираем Velocity 
:(
    Опции темы
Kangaroo
Дата 10.5.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(VetaleG @  10.5.2008,  18:05 Найти цитируемый пост)
Может некий аналог блока "<![CDATA[ ... ]]>" из xml? (идеальный вариант, на мой взгляд)

Нет, такого нету я думаю. Можно взглянуть на Escape Tool, там есть методы для получения решетки, доллара и т.д.


--------------------
Lost....
PM MAIL MSN   Вверх
ivg
Дата 12.5.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



VetaleG, так и используйте Velocity. Это ж очевидно, или я чего то не понял?
Цитата(VetaleG @  10.5.2008,  21:05 Найти цитируемый пост)
Необходимо, чтобы весь текст этой части был перенесён в результирующий документ без изменений

Вставляете в шаблон переменную, её значением и будет 
Цитата(VetaleG @  10.5.2008,  21:05 Найти цитируемый пост)
часть, которая генерируется динамически
 ?

PM MAIL   Вверх
VetaleG
Дата 13.5.2008, 21:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.6.2007

Репутация: нет
Всего: 1



ivg, не буду вдаваться в подробности, но мне нужен именно механизм ескейпинга некоторого абстрактного текста. Т.е. вопрос в следующем:
- есть набор символов на входе (текст)
- мы его каким-то образом изменяем (ескейпим)
- скармливаем изменённый текст Velocity в качестве шаблона
- должны получить на выходе исходный текст при любом контексте.

Тривиальным образом, я как понял, данная задача не решается. а жаль...

Kangaroo, спасибо за ссылку. Escape Tool решает задачу лишь частично. (не проходит "при любом контексте", т.к. как минимум ${esc.d} будет в итоге запрешён для использования в "нормальной" части шаблона).

По теме я бы записал "странный" эскейпинг в минусы велосити. Не очень понятно для чего нужно было так усложнять. Представьте себе ситуацию, когда писать в String '\\' или '\' зависело бы от того, какие символы следуют далее  smile 
PM MAIL   Вверх
ivg
Дата 13.5.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



VetaleG, наверно вы меня не поняли. Вот пример (все условия выполняются):
Код

import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Random;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;


public class Test {

    private static Random rand = new Random();
    
    public static String getRandomString(int length) {
        byte bm [] = new byte[length];
        bm[0] = (byte)(0x41 + rand.nextInt(26));
        for (int i = 1, j; i < length; i++) {
            j = rand.nextInt(36);
            bm[i] = (byte)(j > 9 ? 0x41 + j - 10 : 0x30 + j);
        }
        try {
            return new String(bm, "US-ASCII");
        } catch (UnsupportedEncodingException e) {
            return new String(bm);
        }
    }
    
    public static String escapeString(Context ctx, String input) {
        String name = getRandomString(16);
        ctx.put(name, input);
        return "${" + name + "}";
    }
    
    public static void main(String[] args) throws Exception {
        VelocityEngine vel = new VelocityEngine();
        vel.init();
        Context ctx = new VelocityContext();
        ctx.put("test", "This is test value;");
        
        String templateContent = "$test\n";
        String staticContent = "#if()\n\\#set()\\\\#ole()\n${test}\\$test\\\\$$";
        templateContent += escapeString(ctx, staticContent);
        
        PrintWriter w = new PrintWriter(System.out);
        vel.evaluate(ctx, w, "ole", templateContent);
        w.flush();
    }
}

PM MAIL   Вверх
VetaleG
Дата 14.5.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.6.2007

Репутация: нет
Всего: 1



ivg, думаю класть в контекст, в котором и без того много мусора, рандомные сущности не очень хорошая идея. Понимаю, что возможность коллизии ничтожна, но всё же существует.
Временное решение, подсказанное Kangaroo, мне больше понравилось. Запретим дизайнерам использовать $escape.dollar и $escape.sharp и каждый доллар или решётку в их тексте будем заменять на ${$escape.dollar} и ${$escape.sharp} соответственно.
Всем спасибо за помощь.
PM MAIL   Вверх
qnub
  Дата 18.6.2008, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



у меня грабельки. есть шаблон velovcity:
Код

<select name="type" title="каждое последующее включает все предыдущие">
#foreach($type in $types.keySet())
#if($right.getType()==$type)
  #set($selected = 'selected="selected"')
#else
  #set($selected = '')
#end
  <option value="$type" $selected>$types.get($type)</option>
#end
</select><br />

$types равен:
Код

{r=чтение, w=запись, m=модерация, a=администрирование}

и представляет собой TreeMap (важен порядок следования, при HashMap всё работает отлично)
на выходе получается:
Код

<select name="type" title="каждое последующее включает все предыдущие">
  <option value="r" >чтение</option>
  <option value="w" >запись</option>
  <option value="m" >$types.get($type)</option>
  <option value="a" selected="selected">$types.get($type)</option>
</select><br />

самое инстересное, что если изменить порядок следования элементов в $types на обратный то вывод будет такой:
Код

<select name="type" title="каждое последующее включает все предыдущие">
  <option value="a" selected="selected">администрирование</option>
  <option value="m" >модерация</option>
  <option value="w" >запись</option>
  <option value="r" >$types.get($type)</option>
</select><br />


куда копать?  smile 
PM MAIL   Вверх
Kangaroo
Дата 18.6.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(qnub @  18.6.2008,  08:01 Найти цитируемый пост)
куда копать?

Попробовал. Работает smile

Покажи как ты готовишь данные для велосити. И как у тебя получается порядок r,w,m,a (если это ТриМеп??)

Это сообщение отредактировал(а) Kangaroo - 18.6.2008, 09:32


--------------------
Lost....
PM MAIL MSN   Вверх
qnub
Дата 18.6.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



дерево берётся из файла XStream'ом. файл:
Код

<?xml version="1.0" encoding="UTF-8"?>
<tree-map>
  <no-comparator/>
  <entry>
    <string>r</string>
    <string>чтение</string>
  </entry>
  <entry>
    <string>w</string>
    <string>запись</string>
  </entry>
  <entry>
    <string>m</string>
    <string>модерация</string>
  </entry>
  <entry>
    <string>a</string>
    <string>администрирование</string>
  </entry>
</tree-map>


собсна порядок следования записей в файле и обуславливает порядок их в дереве. если использовать такой файл:
Код

<?xml version="1.0" encoding="UTF-8"?>
<map>
  <entry>
    <string>r</string>
    <string>чтение</string>
  </entry>
  <entry>
    <string>w</string>
    <string>запись</string>
  </entry>
  <entry>
    <string>m</string>
    <string>модерация</string>
  </entry>
  <entry>
    <string>a</string>
    <string>администрирование</string>
  </entry>
</map>

для загрузки в HashMap, то порядок рушится... :( но всё работает

прошу заметить, что ключи выводятся все (value="r", и т.д.) а вот значения к нив пропадают...

при выводе в лог дерева, уже после отдачи в контекст велосити, оно выводится полностью, т.е.:
Код

{r=чтение, w=запись, m=модерация, a=администрирование}


...
PM MAIL   Вверх
Kangaroo
Дата 18.6.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



qnub, попробуй сунуть ему в таком порядке:

Код

<?xml version="1.0" encoding="UTF-8"?>
<tree-map>
  <no-comparator/>
  <entry>
    <string>a</string>
    <string>администрирование</string>
  </entry>
  <entry>
    <string>m</string>
    <string>модерация</string>
  </entry>
  <entry>
    <string>r</string>
    <string>чтение</string>
  </entry>
  <entry>
    <string>w</string>
    <string>запись</string>
  </entry>
</tree-map>


И напиши, что получилось.


--------------------
Lost....
PM MAIL MSN   Вверх
qnub
Дата 18.6.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



сработало:
Код

<select name="type" title="каждое последующее включает все предыдущие">
  <option value="a" selected="selected">администрирование</option>
  <option value="m" >модерация</option>
  <option value="r" >чтение</option>
  <option value="w" >запись</option>
</select><br />


но здесь перепутаны r и w. мне если брать на оборот то нужно:
Код

<?xml version="1.0" encoding="UTF-8"?>
<tree-map>
  <no-comparator/>
  <entry>
    <string>a</string>
    <string>администрирование</string>
  </entry>
  <entry>
    <string>m</string>
    <string>модерация</string>
  </entry>
  <entry>
    <string>w</string>
    <string>запись</string>
  </entry>
  <entry>
    <string>r</string>
    <string>чтение</string>
  </entry>  
</tree-map>


что даёт: 
Код

<select name="type" title="каждое последующее включает все предыдущие">
  <option value="a" selected="selected">администрирование</option>
  <option value="m" >модерация</option>
  <option value="w" >запись</option>
  <option value="r" >$types.get($type)</option>
</select><br />


заковыка в "w"? если да, то в чём прикол?  smile 
PM MAIL   Вверх
Kangaroo
Дата 18.6.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(qnub @  18.6.2008,  10:06 Найти цитируемый пост)
если да, то в чём прикол? 

Смотри - у тебя получается TreeMap с ключами не в алфавитном порядке, а это противоествественно. Поэтому и .get() криво работает. Напиши свой компаратор, который будет выставлять ключам правильный порядок.

Странно как XStream так добавляет в мапу, что получается бардак.


--------------------
Lost....
PM MAIL MSN   Вверх
qnub
Дата 18.6.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



ок. спасибо. буду доделывать smile
PM MAIL   Вверх
qnub
Дата 19.6.2008, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



решил проблему:

компаратор писать не стал, ибо непонятно по каким критериям сравнивать позиции, а наиболее оптимальным является вариант произвольного задания поледовательности в файле в итоге сделал так. файл опций, загружаемый XStream'ом:
Код

<?xml version="1.0" encoding="UTF-8"?>
<tree-map>
  <no-comparator/>
  <entry>
    <int>0</int>
    <string-array>
      <string>r</string>
      <string>чтение</string>
    </string-array>
  </entry>
  <entry>
    <int>1</int>
    <string-array>
      <string>w</string>
      <string>запись</string>
    </string-array>
  </entry>
  <entry>
    <int>2</int>
    <string-array>
      <string>m</string>
      <string>модерация</string>
    </string-array>
  </entry>
  <entry>
    <int>3</int>
    <string-array>
      <string>a</string>
      <string>администрирование</string>
    </string-array>
  </entry>
</tree-map>


т.е. сортировка происходит по ключу, который является целым числом и сортируется по возрастанию. а значением является одномерный массив из двух компонентов, первый из которых - значение переменной, а второй её описание, понятное человеку. в итоге добавил в контекст ListTool для Velocity:
Код

page.put("list",new ListTool());


и, собсна, генератор списка выходит такой:
Код

<select name="type" title="каждое последующее включает все предыдущие">
#foreach($type in $types.keySet())
#if($right.getType()==$type)
  #set($selected = 'selected="selected"')
#else
  #set($selected = '')
#end
  <option value="$list.get($types.get($type),0)" $selected>$list.get($types.get($type),1)</option>
#end
</select><br />


вобщем пользуйте, ежели кому нужно smile

Это сообщение отредактировал(а) qnub - 19.6.2008, 07:59
PM MAIL   Вверх
twilightDream
Дата 4.8.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



[QUOTE=pvo,3.11.2005,  09:47]
Цитата
 В один прекрасный момент нам требуется отправить  эту страницу по почте, причем не в процессе обслуживания запроса 

В ПШП такое давно есть. Можно сгенерировать страницу, затем делать с ней что угодно.
Вообще. смотря на ситуацию глобально создается впечатление что ява в вэб программировании постепенно угасает, несмотря на старания, и в скором времени перекочует в мобильники.
PM MAIL   Вверх
qnub
Дата 4.8.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



ОФФТОП
думаю не надо путать тёплое с мягким... ПХП неможет многое что может ява... кроме того тема не про то

PM MAIL   Вверх
Страницы: (10) Все « Первая ... 6 7 [8] 9 10 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1761 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.