- springmvc freemarker 动态加载(不用重启tomcat立即生效)
- FreeMarker 判断List不为空
- Cannot expose request attribute 'website' because of an existing model object of the same name 的解决方案
- Java模板引擎 FreeMarker介绍
- FreeMarker入门教程
- FreeMarker基本标签的使用
- FreeMarker基本数据类型
- FreeMarker集合(List、Map)
- FreeMarker自定义指令
- FreeMarker四种变量的用法
- FreeMarker模板包含及名称空间
- freemarker 空值处理
知识点
相关文章
更多最近更新
更多FreeMarker模板包含及名称空间
2019-03-06 10:07|来源: 领悟书生
FreeMarker模板包含及名称空间,主要是为了模板的重用。使用<#include>包含其他模板,如果包含多个模板,可能会出现同名变量被覆盖的问题。可以使用import来完成导入,并且加入名称空间
模板11.ftl包含/inc/inc1.ftl和/inc/inc2.ftl
inc1.ftl:
<#assign username="张三">
<#macro test> hello world <#macro> |
/inc/inc2.ftl:
<#assign username="李四"> |
11.ftl的模板及输出:
<#include style="color:black"> <#include style="color:black"> ${username} |
李四 |
从上面的例子中可以看出使用incldue会出现同名变量被覆盖的问题,可以使用import来完成导入,并且加入名称空间(名称空间其实就是给引入的模板起一个名称)
<#import style="color:black"> <#import style="color:black"> ${inc2.username} ${inc1.username} |
李四 张三 |
在11.ftl中,也可在定义模板变量时指定其所属的名称空间(inc2或inc1,不能凭空捏造),且此时就必须使用"名称空间.变量名"的方法访问了
<#--<>将一个变量定义到名称空间中--> <#assign age="12"> ${inc2.age} |
12 |
访问名称空间中的自定义指令
在inc1.ftl中有一个自定义的指令test,访问方式如下:
<#--<>访问名称空间中的自定义指令--> <@inc1.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 would be ...
-
原来这是一个简单的语法错误。 它应该读, <#include template> 而不是 <#include $template> Turns out it was a simple syntax error. It should read, <#include template> rather than <#include $template>
-
我在原来的ftl中添加了这一行:
<#include "footer.ftl">
此文件位于同一文件夹中(我没有尝试其他位置)并包含页脚文本,如: Copyright 2001-2002
All rights reserved. I added just this line to the original ftl:<#include "footer.ftl">
This file is in the same folder (I havent tried ... -
使用freemarker为自定义变量格式化xml模板(format xml template for the custom variables using freemarker)[2023-08-01]
我注意到你说的是“尝试使用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() { ...
-
freemarker配置按区域设置和模板名称获取模板(freemarker configuration get template by locale and template name)[2022-10-06]
当你调用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.createProcessingEnvir ... -
获取Template对象本身就足以进行语法验证。 验证模板是否会在运行时失败可能会非常棘手,具体取决于应用程序,因为您需要一个类似于真实数据模型的数据模型。 但是我们假设你可以在你的情况下提供这样的数据模型。 那么问题是ModelAndView不是你的模型。 顾名思义,这就是你的模型和观点。 它只包含你的模型,里面。 (FreeMarker不依赖于Spring,因此只需将该对象用作泛型JavaBean,因此您的变量将是ModeAndView对象本身的JavaBean属性。)尝试将ModelAndView.g ...
-
在Freemarker模板中访问带有命名空间的DOM元素(Accessing DOM element with namespace in Freemarker template)[2024-04-11]
用它启动模板 <#ftl ns_prefixes={"D":"http://www.exmple.com/XMLSchema/fulfillment/v1/order/orderShipment"}> 这将命名空间设置为默认值( D代表默认值)。 请注意,如果您还将使用XPath查询,则必须在元素名称之前写出D:这是一个XPath限制。 这在此处记录: http : //freemarker.org/docs/xgui_imperative_learn.html Start the template wi ... -
始终使用${item.name} 。 在数据模型根本身是项目的情况下(是吗?),您可以在#include之前执行类似<#assign item = .data_model>的操作。 Always use ${item.name}. In the case when the data-model root itself is the item (is it?), you can do something like <#assign item = .data_model> before the #include ...