java ftl 模板 包含_FreeMarker模板包含及名称空间

FreeMarker模板包含及名称空间

2019-03-06 10:07|来源: 领悟书生

FreeMarker模板包含及名称空间,主要是为了模板的重用。使用包含其他模板,如果包含多个模板,可能会出现同名变量被覆盖的问题。可以使用import来完成导入,并且加入名称空间

模板11.ftl包含/inc/inc1.ftl和/inc/inc2.ftl

inc1.ftl:

hello world

/inc/inc2.ftl:

11.ftl的模板及输出:

${username}

李四

从上面的例子中可以看出使用incldue会出现同名变量被覆盖的问题,可以使用import来完成导入,并且加入名称空间(名称空间其实就是给引入的模板起一个名称)

${inc2.username}

${inc1.username}

李四

张三

在11.ftl中,也可在定义模板变量时指定其所属的名称空间(inc2或inc1,不能凭空捏造),且此时就必须使用"名称空间.变量名"的方法访问了将一个变量定义到名称空间中-->

${inc2.age}

12

访问名称空间中的自定义指令

在inc1.ftl中有一个自定义的指令test,访问方式如下:访问名称空间中的自定义指令-->

hello world

本文链接:FreeMarker模板包含及名称空间,本文由huangyineng原创,转载请注明出处

相关问答

您缺少示例XML中的xmlns:ns="http://stackoverflow.com/" 。 如果我添加它,那么它对我有用。 You are missing the xmlns:ns="http://stackoverflow.com/" from your example XML. If I add that, then it works for me.

FreeMarker目前没有用于检查模板的已发布API,更不用说修改它们了。 它会很有用,但它没有它。 所以,我想知道你是否可以从不同的角度解决问题。 您说您正在动态生成模板,除非模板本身是用户提交的,否则您可以根据生成模板的方式存储用户提交的信息,而不是模板本身...或类似的东西。 FreeMarker currently doesn't have a published API for inspecting templates, let alone modifying them. It wou

...

原来这是一个简单的语法错误。 它应该读,

而不是

Turns out it was a simple syntax error. It should read,

rather than

我在原来的ftl中添加了这一行:

此文件位于同一文件夹中(我没有尝试其他位置)并包含页脚文本,如: Copyright 2001-2002

All rights reserved.

I added just this line to the original ftl:

This file is in the same folder (I havent t

...

我注意到你说的是“尝试使用map:{_prop.Var1:XXX},但这也不起作用”。 我不确定这意味着什么(比如,Java代码是什么),但是如果你尝试过类似variables.put("_prop.Var1", "XXX") ,那么这将不起作用,因为当你编写的模板_prop.Var1然后FreeMarker将首先查找_prop ,如果找到了,那么在它里面寻找Var1 。 它不会查找“_prop.Var1”键(因为您必须在模板中编写_prop\.Var1 ,以便将该点视为名称的一部分,而不是作为运

...

发生这种情况是因为在MockServletContext使用的spring的org.springframework.core.io.DefaultResourceLoader将不会加载像您用于freemarker结果配置的url-s,例如/WEB-INF/content/errors/error.ftl 。 您可以通过在测试中重写initServletMockObjects方法来提供不同的资源加载器。 @Override

protected void initServletMockObjects(

...

当你调用getTemplate("foo.ftl", Locale.US) ,FreeMarker首先尝试加载foo_en_US.ftl ,然后加载foo_en.ftl ,最后foo.ftl 。 所以法语模板应该命名为foo_fr.ftl 。 为getTemplate指定的语言环境还决定了模板内部locale设置的值。 但是,可以在Environment对象中覆盖它。 如果代替myTemplate.process(...)你可以调用env = myTemplate.createProcessing

...

获取Template对象本身就足以进行语法验证。 验证模板是否会在运行时失败可能会非常棘手,具体取决于应用程序,因为您需要一个类似于真实数据模型的数据模型。 但是我们假设你可以在你的情况下提供这样的数据模型。 那么问题是ModelAndView不是你的模型。 顾名思义,这就是你的模型和观点。 它只包含你的模型,里面。 (FreeMarker不依赖于Spring,因此只需将该对象用作泛型JavaBean,因此您的变量将是ModeAndView对象本身的JavaBean属性。)尝试将ModelAndV

...

用它启动模板

这将命名空间设置为默认值( D代表默认值)。 请注意,如果您还将使用XPath查询,则必须在元素名称之前写出D:这是一个XPath限制。 这在此处记录: http : //freemarker.org/docs/xgui_imperative_learn.html Start the templa

...

始终使用${item.name} 。 在数据模型根本身是项目的情况下(是吗?),您可以在#include之前执行类似的操作。 Always use ${item.name}. In the case when the data-model root itself is the item (is it?), you can do something like before the #in

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值