freemarker include必须在同一个目录下吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker include必须在同一个目录下吗相关的知识,希望对你有一定的参考价值。

参考技术A 不需要啊,模板有个总的目录,假设为根目录,include的时候,可以用绝对路径,也能用相对路径。
我是习惯用绝对路径,比如
<#include "/includes/v2/headerMacro.ftl">
includes目录就是根目录下的一个目录,所以直接用“/includes”就好了。
可以在任何地方的模板里面直接用上面那句。
绝对路径比相对路径方便很多的。追问

如果两个模版一个在d盘,一个在E盘,那这两个怎么include到一块

追答

那就看你的TemplateLoader是怎么写的了。
很神奇的是,你怎么会搞几个不同地方的盘的模板。
或者你可以直接做个链接,链接过去啊。
你让TemplateLoader不好过,你也好过不了的。

追问

就是模版都是从数据库中取出来的,比如首页分为3部分,头部,中间的内容,尾部,最后把相应位置替换掉

追答

模板从数据库取出来是什么意思?模板还放数据库的???什么逻辑啊?照你的意思,就是数据库取模板内容,再取数据,就出来最后的页面了?天啊。

追问

嗯 就是这样。这样直接操作数据库就可以改了

追答

那你模板生成的位置,是随便乱定的?还是根本就不生成模板?

追问

模版是从数据库中取得, template.process(root, out);到特定的位置

追答

一个项目里面的模板,难道随便乱丢的?你模板生成到特定位置,也就有特定目录吧,实际使用模板的时候,那个特定目录,不就是根目录啊?你要生成到不同的盘,这能说明什么呢?一般一个项目中的模板,都搁一起的。freemarker的模板根目录,是能随便设置的,直接指过去就是了。

FreeMarker - 获取当前 URL

【中文标题】FreeMarker - 获取当前 URL【英文标题】:FreeMarker - Get Current URL 【发布时间】:2011-03-13 13:18:16 【问题描述】:

是否可以在FTL中获取当前页面的URL?

【问题讨论】:

【参考方案1】:

据我所知,freemarker 严格来说是一个模板引擎——它只是生成文本,并且无法知道该文本将出现在哪里。如果您想包含“当前页面的 URL”,则必须将该数据从主机 Java 代码(推荐)传递到模板中,或者您必须使用 javascript 在客户端检测它。

【讨论】:

【参考方案2】:

作为补充:如果您使用的是 FreemarkerServlet,则会将名为“Request”的哈希传递给每个模板,根据文档 here,每个模板都应该有一个键 requestURL。

【讨论】:

【参考方案3】:

是的,这是可能的。确保在应用程序上下文中为视图解析器添加“exposeSpringMacroHelpers”。

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="exposeSpringMacroHelpers" value="true" />
    <property name="prefix" value="/view/" />
    <property name="suffix" value=".ftl" />
</bean>

然后在你的模板中调用 $springMacroRequestContext.getRequestUri()

<span>This page's url is: $springMacroRequestContext.getRequestUri()</span>

【讨论】:

【参考方案4】:

我正在运行 Spring 3.2.x,exposeSpringMacroHelpers 默认为 true。

根据Spring Documentation

设置是否暴露一个RequestContext供Spring的宏使用 库,名称为“springMacroRequestContext”。默认为 “真”。

在我看来,我可以这样做

&lt;#if springMacroRequestContext.requestUri?contains("/login")&gt;

希望对你有帮助。

【讨论】:

如果您使用的是 spring 4,您可以使用 FreeMarkerAutoConfiguration 进行配置 requestUri :这是 URI,而不是 URL(由 OP 询问)【参考方案5】:

只需使用这一行:

<#assign url = http.request.url />
$url

【讨论】:

【参考方案6】:
[#assign currentSiteName = sitefn.site().name]
$currentSiteName$state.currentURI

currentSiteName 将给出主页 url,state.currentURI 将给出后面的部分,因此您可以将其形成为:

baseURL + $currentSiteName$state.currentURI

【讨论】:

以上是关于freemarker include必须在同一个目录下吗的主要内容,如果未能解决你的问题,请参考以下文章

如何在NetSuite中将一个Freemarker模板转换为另一个模板?

在js中使用freemarker的标签比如 include 等

关于freemarker include的问题

Freemarker:包含和导入之间的区别?

如何配置 Maven Freemarker 以识别 `@include_page` 标签?

FreeMarker在使用#include和#import时,路径问题