Java Freemarker обеспечивает доступ к шаблонному движку только для пользовательских аннотированных методов? - PullRequest
0 голосов
/ 20 мая 2018

Во время инкапсуляции переменных представления в класс POJO и предоставления его процессору шаблонов, возможно ли ограничить методы, которые могут вызываться механизмом шаблонов, с помощью пользовательской аннотации?Ограничение видимости с помощью закрытого метода невозможно из-за наследования.

Я использую FreeMarker с Spring MVC.

Процессор шаблонов получает класс контроллера POJO от контроллера:

model.addAttribute("view", new SamplePOJO(this));

Класс SamplePOJO:

public final class SamplePOJO extends View
{
    public SamplePOJO(MasterController<?> _inject)
    {
        super(_inject);
    }

    @CustomAnnotationOnValidMethods
    public String getValid_value()
    {
        return "valid call";
    }

    @Override
    public String getInvalid_value()
    {
        return "invalid call";
    }
}

Шаблон:

<p>Valid invocation: ${view.valid_value}</p>
<p>Also valid but I want this to be impossible: ${view.invalid_value}</p>

1 Ответ

0 голосов
/ 20 мая 2018

Да, DefaultObjectWrapper (или любой другой BeansWrapper подкласс) имеет настройку methodAppearanceFineTuner (https://freemarker.apache.org/docs/api/freemarker/ext/beans/MethodAppearanceFineTuner.html).. В вашей реализации MethodApperanceFineTuner вы можете скрыть метод, вызвав MethodAppearanceDecision.setExposeMethodAs(null). Вы можете ввестиваш MethodApperanceFineTuner объект, для которого вы настраиваете FreeMarker, например, вы создаете DefaultObjectWrapperBuilder, вызываете его метод setMethodAppearanceFinteTuner(MethodAppearanceFinteTuner), затем build() и передаете результат в Configuration.setObjectWrapper(ObjectWrapper).

...