如何在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>
您不必使用<list>
,当然,它只是作为示例,因为您的方法返回一个列表。
【讨论】:
当我的 bean 扩展 TreeMap 时出现问题。在这种情况下它找不到方法。 @tbraun:在这种情况下,您需要?api
。 Map
-s 的方法没有公开(至少有DefaultObjectWrapper
),因为在 FTL 中,与 Java 不同,这些方法没有自己的命名空间。所以它们会与地图中的键混合,比如myMap.someKey
和myMap.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
方法的返回值可能很有用:像这样:<#list myBean.getunits("myType")![] as unit>
。在这种情况下,默认为空序列。以上是关于如何在freemarker中调用java的方法的主要内容,如果未能解决你的问题,请参考以下文章