如何在freemarker中调用java的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在freemarker中调用java的方法相关的知识,希望对你有一定的参考价值。

参考技术A 解决方案 »

freeer可以声明变量,可以写一些函数,可以调用自己的函数
可~~要实例化java类并且调用它的方法~~~没遇到过....
帮忙顶!期待高手

急啊,我也想在ftl中调用一个类的静态方法...

可以,可以将你写的类当成对象假如到MAP中
然后在再用map?key的方法获得该类
JAVA代码
maplist.put("typeTool",this);
FREEMARKER
<#assign name=typeTool.getTypeName(key)>$name

方法1:
##定义配置文件 freeerstatic.properties
_Validator=com.longyou.util.Validator
_Functions=com.longyou.util.Functions
_EscapeUtils=com.longyou.util.EscapeUtils
/调用代码
$_Functions.toUpperCase("Hello")<br>
$_EscapeUtils.escape("狼的原野")方法2:
$stack.findValue("@package.ClassName@method")$stack.findValue("@package.ClassName@property")因为 stack 是webwork结合 freeer 后在 ftl 中可以用的,其他的还有 $base等等

如何从 FreeMarker 模板调用对象的 java 方法?

【中文标题】如何从 FreeMarker 模板调用对象的 java 方法?【英文标题】:How do I call java methods on an object from a FreeMarker template? 【发布时间】:2010-11-24 15:25:57 【问题描述】:

是否可以调用从 Freemarker 模板获取参数的方法?

我有一个对象模型,我正在尝试使用 Freemarker 将其渲染到网页中。其中一个对象有一种方法来获取其内容的子列表 - 采用一个用于过滤列表的参数:

public List getunits(final String type);

我知道在 JSP 中你不能直接这样做,但是你可以编写自定义函数来实现你想要的结果。你如何在 Freemarker 中解决这个问题?写自定义函数也一样吗?或者有什么方法可以实际调用这种函数?

【问题讨论】:

【参考方案1】:

FreeMarker 允许从 expressions 中调用通过模型提供的方法。

假设您的对象已公开为myBean,您可以按如下方式调用该方法:

<#list myBean.getunits("myType") as unit>
  do stuff with $unit
</#list>

您不必使用&lt;list&gt;,当然,它只是作为示例,因为您的方法返回一个列表。

【讨论】:

当我的 bean 扩展 TreeMap 时出现问题。在这种情况下它找不到方法。 @tbraun:在这种情况下,您需要?apiMap-s 的方法没有公开(至少有DefaultObjectWrapper),因为在 FTL 中,与 Java 不同,这些方法没有自己的命名空间。所以它们会与地图中的键混合,比如myMap.someKeymyMap.get(返回Map.get 方法)都会返回一些东西,并且都将与myMap?keys 一起列出,等等。那将是一团糟。所以默认情况下myMap.something 只查找something Map 键,而不是something 方法。但你可以像myMap?api.get(...) 一样解决这个问题。【参考方案2】:

正如 ChssPly76 所说,只要在模型中公开对象,您就可以从 Freemarker 模板中执行方法调用。

但重要的是要记住,如果您的方法返回 NULL(无论出于何种原因),您将会感到困惑

Expression myBean.getunits() is undefined on line ....

为避免这种情况,您最好使用myBean.getunits(...)!(注意感叹号)。

在此处了解有关 Freemarker 如何处理空值的更多信息:http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing

【讨论】:

了解! 非常有帮助。另外,请注意,将默认值添加到 getunits 方法的返回值可能很有用:像这样:&lt;#list myBean.getunits("myType")![] as unit&gt;。在这种情况下,默认为空序列。

以上是关于如何在freemarker中调用java的方法的主要内容,如果未能解决你的问题,请参考以下文章

FreeMarker里如何调用java代码?

如何在freemarker模板中调用反射方法?

FreeMarker里如何调用java代码?

FreeMarker里如何调用java代码?

FreeMarker中调用Java方法的实现

freemarker中调用java方法,除了内建函数,自定义的怎么调用?