Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Velocity, доступ к переменой зная её имя, как ?


Автор: Intorion 11.5.2008, 14:17
Чтото я не могу найти решение такой проблемы: как зная имя переменой получить её значение из VelocityContext ?
В velocity передаётся мап данных, строка-значение, но дело в том, что ключ в мапе генерится автоматически(в зависимости от количество доступных переводов страницы), и надо пробежаться по списку доступных языков(2х значное значение) и выдать все переменые с определёным префиксом и идентификатором языка, переменая выглядит примерно так: name.ru где ru надо изменить. В ручную вбить все значения в велосити не получится, так как кроме языка есть ещё и идентификаторы из базы(очень много)
Так просто написать $name.$language не получается. Как это сделать  ?

Автор: Stampede 12.5.2008, 22:14
Intorion, на наше щастье, в Velocity подобные извраты реализуются достаточно легко путем написания собственных компонент, что позволяет задействовать всю объектно-ориентированную мощу языка Java.

В твоем случае для переключения между языками вывода проще всего будет расширить класс VelocityContext так, чтобы он добавлял к имени переменной заранее определенный постфикс целевого языка, примерно вот так:

Код

public class MultilingualVelocityContext extends VelocityContext {
    public static final String LANG_ENGLISH = "en";
    public static final String LANG_RUSSIAN = "ru";
    public static final String LANG_CHINESE = "cn";
    // ...

    private String language;

    public MultilingualVelocityContext(String lang) {
        language = lang;
    }

    @Override
    public void put(String key, Object value) {
        key += '.' + language;
        super.put(key, value);
    }

    @Override
    public Object get(String key) {
        key += '.' + language;
        return super.get(key);
    }
}


Может я и не совсем понял твою задачу, и мой вариант - это не совсем то, что тебе нужно, но идею, я надеюсь, ты уловил, и подрихтовать под свои нужды теперь сможешь самостоятельно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)