freemarker中有没有办法比较日期来测试日期是今天还是昨天......或者我是否必须用Java编写代码来进行这些测试?
我基本上想要这样做:
<#------------------------------------------------------------------------------
formatDate
------------------------------------------------------------------------------->
<#macro formatDate date showTime=true>
<#if date??>
<span class="Date">
<#if date?is_today>
Today
<#elseif date?is_yesterday>
Yesterday
<#else>
${date?date}
</#if>
</span>
<#if showTime>
<span class="Time">${date?time}</span>
</#if>
</#if>
</#macro>
Run Code Online (Sandbox Code Playgroud)
编辑:我最好的猜测是将"今天"和"昨天"传递给使用此函数的页面的模型,然后将日期值与模型中的这两个对象进行比较.我没有选择,但我不想为每个使用此宏的页面执行此操作.还有其他更好的选择吗?
<#if date??>
<span class="Date">
<#if date?date?string.short == today?date?string.short>
Today
<#elseif date?date?string.short == yesterday?date?string.short>
Yesterday
<#else>
${date?date}
</#if>
</span>
<#if showTime>
<span class="Time">${date?time}</span>
</#if>
</#if>
Run Code Online (Sandbox Code Playgroud) 我有一些使用Integers作为键的哈希表,我希望能够在我的Freemarker模板中迭代它们,但是,似乎没有任何效果.
我尝试了Freemarker迭代hashmap键的例子:
<#list user.props() as prop>
${prop} = ${user.get(prop)}
</#list>
Run Code Online (Sandbox Code Playgroud)
它可能适用于Strings作为键,但它不适用于Integers.我甚至无法通过具体值从哈希表中检索值.我拥有的是:
Hashtalbe ht = new Hashtable();
ht.put(1, "hello");
datamodel.put("devices", ht);Run Code Online (Sandbox Code Playgroud)
(datamodel是传递给模板的hashmap).
在模板中,我执行以下操作:
<#if devices??>
<#list devices?keys as prop>
<p>${prop}</p>
<p>${devices.get(1)}</p>
OR
<p>${devices.get(key)}</p>
OR
<p>${devices[key]}</p>
OR
<p>${devices[1]}</p>
</#list>
<#else>
<p> no devices</p>
</#if>
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用.你能帮我吗?
PS.我将哈希表转换为将其传递给模板,但这似乎是一种解决方法.
最好的问候,蒂莫菲
我有一个Map,其键和值以及自定义类.调用密钥类,Position并使用两个int进行实例化(例如new Position(2, 4).
我摆脱了这个Position类并将地图转换为a SimpleHash以便与Freemarker一起使用.我现在有一个SimpleHash键为字符串重新映射位置值(例如"2 4"),其值是null或Lot(自定义)类.
在模板中,我需要检查SimpleMap中给定项的值(传递为map)是null还是Lot实例.
<#list mapMinY..mapMaxY as y>
<tr>
<#list mapMinX..mapMaxX as x>
<td>
<div>
<!-- Check if map[x + " " + y] is null -->
${x}, ${y}
</div>
</td>
</#list>
</tr>
</#list>
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
这很好用:
<#list myObjects as myObject>
<tr>
<td>${myObject.person.surname}</td>
<td>${myObject.myListOfCountries[0].city.name}</td>
</tr>
</#list>
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试创建一个这样的嵌套列表,这不起作用:
<#list myObjects as myObject>
<tr>
<td>${myObject.person.surname}</td>
<#list myObject.myListOfCountries as item>
<td>${item.city.name</td>
</#list>
</tr>
</#list>
Run Code Online (Sandbox Code Playgroud)
我收到的错误如下所示:
freemarker.core.ParseException: Encountered "/"
Run Code Online (Sandbox Code Playgroud)
任何导致错误的想法 - 是freemarker中允许的嵌套列表吗?
我的模板看起来像这样:
<#assign senti = "${scmr.results[model]}">
<#if senti??>
<td>${senti} ---- ${senti.sentimentType}</td>
<td>${senti.score?html}</td>
</#if>
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
POSITIVE(1.0/1) ---- Expected hash. senti evaluated instead to freemarker.template.SimpleScalar on line 5, column 27 in com/addthis/sentiment/sentidemo.ftl.
Run Code Online (Sandbox Code Playgroud)
"----"之前的输出文本表明senti确实是一个有效的java Sentiment对象.方法getSentimentType和getScore存在并正常工作.
那么,为什么我会收到错误?
我正在使用替代的freemarker语法(带方括号的语法).它工作正常,但我无法弄清楚如果条件检查数字是否大于或小于如何使用.以下是我的语法
[#if ${numberCoupons} <= 1]
[#assign couponsText = 'coupon']
[/#if]
Run Code Online (Sandbox Code Playgroud)
这里"<"符号失败.你知道我在这里做错了什么.
还有任何可以与freemarker的替代语法一起使用的整个指令列表的文档吗?
我在内页有问题.它只是将页面识别为iso,但我想要utf-8,我将其声明为默认字符集.我在freemarker配置上尝试了一些修改,但它们没有效果.
为spring-servlet.xml
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/pages/"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
template.html
<#macro page>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cemitério - Prefeitura Municipal de Maringá</title>
</head>
<body>
Usuários
<#nested/>
</body>
</html>
</#macro>
Run Code Online (Sandbox Code Playgroud)
的login.html
<#import "templates/template.html" as t/>
<@t.page>
<#if erroLogin??>
${erroLogin}
</#if>
<form action="entrar" method="post">
<div>
<label>Usuário:</label>
<input type="text" name="usuario" />
<br />
<label>Senha:</label>
<input type="text" name="senha" />
<br />
<input type="submit" name="submit" />
</div>
</form>
</@t.page>
Run Code Online (Sandbox Code Playgroud)
产量

他们以任何方式根据他们而不是一个一个地遍历列表项吗?我想以1,3,5,7,9和2,4,6,8的顺序遍历一系列字段.我尝试过像这样使用
<#list section.field as field>
<div class="col1">
${field.@label}:<input type="text"/></div>
<#if field_has_next>
<div class="col2">
${field[field_index+1].@label}:<input type="text"/>
</div>
</#if>
</#list>
Run Code Online (Sandbox Code Playgroud)
但它给了我错误.
如何获取freemarker模板中使用的当前区域设置?我见过实施<spring.message code />
我需要这个做有条件的
<#if locale = DE >
.....
<#else>
....
</#if>
Run Code Online (Sandbox Code Playgroud) 如何获取freemarker文件中的当前时间戳(自1970年1月1日以来的秒数)?我知道.nowvar但我没有想到如何获得基本的时间戳格式.