当前位置: 首页 > 知识库问答 >
问题:

如何在FreeMarker中调用公共Java变量

公良鸿光
2023-03-14

我试图在我的FreeMarker模板中调用一个Java方法,该模板使用公共静态Java变量作为其参数之一。例如,如果FreeMarker代码在测试中被删除。ftl是这样的:

${javaClass.getSomething(javaClass.VARIABLE)}

如果类JavaClass看起来像这样:

public class JavaClass {

    public static final int VARIABLE = 1;

    public String getSomething(int var) {
    ...
    }

我在使用模板时收到如下错误:

[echo]表达式JavaClass在com/test/template/path/test第40行第81列中未定义。ftl。[echo]有问题的指令:[echo]------------[echo]03:53:01146错误[main][runtime:96]模板处理错误:“com/test/Template/path/test.ftl中第40行第81列的表达式JavaClass未定义”[echo][echo]==

这个错误抱怨它不喜欢javaClass。变量并抛出InvalidReferenceException。我尝试过用其他不同的方式来指定它,比如JavaClass。变量${javaClass.VARIABLE}${javaClass.VARIABLE},但它们都会抛出错误。

如何从FreeMarker(.ftl)模板中的Java方法中调用公共Java变量?


共有1个答案

云曦之
2023-03-14

Freemarker的数据模型不会映射自动传入的对象上的静态字段,因此您必须使用BeanRapperhttp://freemarker.org/docs/pgui_misc_beanwrapper.html.

import freemarker.ext.beans.BeansWrapper;

BeansWrapper w = new BeansWrapper(); 
TemplateHashModel statics = w.getStaticModels();
model.addAttribute("myVariable", statics);

然后在模板中,使用

${myVariable["fully.qualified.package.ClassName"].FIELD_NAME}
 类似资料:
  • 我是java的初学者,这段创建公共int变量的代码不起作用: 它给了我一个错误的字号,它说非法参数为修改后的数字;只允许决赛。 可能有一个非常简单的答案,但我是一个初学者,如果这是一个糟糕的问题,很抱歉。

  • 如何调用从公共静态空白到非静态的公共空白碎片类?或者有另一种方法在(listViewHolder.dot.setOnClickListener(new View.OnClickListener()和公共无效搜索3())

  • 我在Dropwizard应用程序中设置视图时遇到了Freemarker的一个奇怪问题。 按照这里的文档,我建立了一个非常简单的示例,如下所示 使用 呈现时的预期输出是显示的HTML文档。 实际发生的情况是Freemarker抛出一个异常,抱怨——特别是——未定义。 这似乎是因为是一个公共字段,没有getter。当我添加一个公共字符串getBar(){返回栏;}getter到时,它就工作了。 我有点

  • 问题内容: 是否可以调用从Freemarker模板获取参数的方法? 我有一个对象模型,试图用Freemarker渲染到网页中。其中一个对象具有一种获取其内容的子列表的方法-采取用于过滤列表的参数: 我知道在JSP中您不能直接执行此操作,但是您可以编写自定义函数来实现所需的结果。您如何在Freemarker中解决此问题?编写自定义函数是否一样?还是有某种实际调用这种功能的方法? 问题答案: Free

  • 问题内容: 我有一个Freemarker模板,其中包含一堆占位符,在处理模板时会为其提供值。如果要提供userName变量,我想有条件地包括模板的一部分,例如: 但是,FreeMarker手册似乎表明if_exists已过时,但是我找不到其他方法来实现这一目标。当然,我可以简单地提供一个额外的布尔变量isUserName,并像这样使用它: 但是,如果有一种方法可以检查userName是否存在,那么

  • 我有一个接一个的类来测试模拟对象。 我的测试: Test01工作正常,但在Test02中我有问题。在Test02方法中,需要调用进程路径。它使用mockNetwork公共最终变量。我不知道在哪里设置它们。它导致了空异常。在上面的代码中,我试图更改此字段的可访问性并设置它们,但现在我在消息“sinkIndex”中出现错误。 如何在mockNetwork中模拟公共最终变量?我正在使用Easymock。