Java Freemarker模板引擎只能访问自定义注释方法吗?

时间:2018-05-19 21:33:32

标签: java spring-mvc templates freemarker

在将视图变量封装到POJO类并将其提供给模板处理器的过程中,是否可以使用自定义注释限制模板引擎可以调用的方法?由于继承,无法通过私有方法限制可见性。

我在Spring MVC中使用FreeMarker。

模板处理器从控制器接收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 :(得分:0)

是的,DefaultObjectWrapper(或任何其他BeansWrapper子类)设置methodAppearanceFineTunerhttps://freemarker.apache.org/docs/api/freemarker/ext/beans/MethodAppearanceFineTuner.html)。在MethodApperanceFineTuner实施中,您可以通过调用MethodAppearanceDecision.setExposeMethodAs(null)来隐藏方法。 您可以在配置FreeMarker的地方注入MethodApperanceFineTuner对象,例如,创建DefaultObjectWrapperBuilder,调用其setMethodAppearanceFinteTuner(MethodAppearanceFinteTuner)方法,然后调用build(),并将结果传递给{{1 }}