Как мой Freemarker ObjectWrapper может получить доступ к настройке шаблона - PullRequest
0 голосов
/ 29 сентября 2019

Вариант использования: системный администратор сохраняет шаблон Freemarker в базе данных, которая используется (API REST Spring Boot) для представления информации, хранящейся пользователями системы (респондентами), с учетом локали, другому типу пользователя (рецензенту).

Ответ респондента может храниться в объекте такого типа (или в списках объектов такого типа, если ожидается, что вопрос, заданный респонденту, будет иметь несколько ответов):

// snip
import com.fasterxml.jackson.databind.node.ObjectNode;
// more imports snipped

public class LanguageStringMap {
    private Map<Language, String> languageStringMap;

    public LanguageStringMap(ObjectNode languageMapNode) {
        // snip of code instantiating a LanguageStringMap from JSON
    }

    public void put(Language language, String value) {
        if (value.length() == 0)
            throw new IllegalArgumentException(String.format(
                    "value for language '%s' of zero length", language.getCode()));
        languageStringMap.put(language, value);
    }

    public String get(Language language) { return languageStringMap.get(language); }
}

То, что я хочу сделать, это написать ObjectWrapper, который отображает экземпляры LanguageStringMap в строку (полученную путем вызова метода get() с языком, полученным из Locale, запрошенного обозревателем рецензента и установленным в шаблоненастройки). Это обеспечивает более удобный пользовательский интерфейс для системного администратора, чем если бы загруженный шаблон содержал кучу вызовов методов шаблона.

Для этого моей оболочке объекта необходимо получить доступ к настройке шаблона. Я просмотрел соответствующую документацию Freemarker , но мне все еще неясно, как это сделать или возможно ли это.

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

1 Ответ

0 голосов
/ 01 октября 2019

Обычно вы просто помещаете строку конкретной локали в модель данных перед обработкой шаблона вместе со всеми другими переменными. В этом случае ObjectWrapper настройка не требуется. Но если вам нужно использовать решение на основе ObjectWrapper, то вы можете получить локаль внутри метода ObjectWrapper (как в переопределении DefaultObjectWrapper.handleUnknownType) с помощью Environment.getCurrentEnvironment().getLocale().

...