【问题标题】:Java Freemarker templating engine access only custom annotated methods?Java Freemarker 模板引擎只能访问自定义注释方法?
【发布时间】:2018-10-29 23:29:05
【问题描述】:

在将视图变量封装到 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>

【问题讨论】:

  • 通过protected 方法限制可见性怎么样?还是包私有方法?

标签: java spring-mvc templates freemarker


【解决方案1】:

是的,DefaultObjectWrapper(或任何其他BeansWrapper 子类)具有methodAppearanceFineTuner 设置(https://freemarker.apache.org/docs/api/freemarker/ext/beans/MethodAppearanceFineTuner.html)。在您的MethodApperanceFineTuner 实现中,您可以通过调用MethodAppearanceDecision.setExposeMethodAs(null) 来隐藏一个方法。 你可以在你配置 FreeMarker 的地方注入你的MethodApperanceFineTuner 对象,比如,你创建一个DefaultObjectWrapperBuilder,调用它的setMethodAppearanceFinteTuner(MethodAppearanceFinteTuner) 方法,然后build(),并将结果传递给Configuration.setObjectWrapper(ObjectWrapper)

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    相关资源
    最近更新 更多