freemarker 宏定义 的not specified
因为页面有几个重复的判断图片的显示路径。所以自己定义了一段宏定义:
<#macro judgeImage info image="images/N_n2pic.gif">
<#if info?exists >
<dt><a href="/info/detail.do?id=${info.id}"><img src="${info.image?default('images/N_n2pic.gif')}" width="95" height="85"/></a></dt>
<#else>
<dt><img src="${image}" width="95" height="85"/></dt>
</#if>
</#macro>
引用:
<dl class="clear">
<@judgeImage zuixinloupandata/>
</dl>
运行结果报错:
==> macro judgeImage [on line 3, column 1 in content_one.ftl]
in user-directive judgeImage [on line 121, column 11 in content_one.ftl]
in include "content_one.ftl" [on line 28, column 1 in index.ftl]
----------
Java backtrace for programmers:
----------
freemarker.template.TemplateException: Error executing macro: judgeImage
required parameter: info is not specified.
说宏定义的第三行的info未定义。
宏定义的info只是传的一个参数而已, 会判断它是否为空?
引用的地方有几个。前面几个没问题, 是因为里面有数据, 结果运行到
<@judgeImage zuixinloupandata/>就异常。 后面的有些是没数据的, 但MAP里面存放了key,只是value为null而已。
求解。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
引用来自“张宋付”的帖子
其实你想在调用是空的话,直接用info?has_content 就可以了。
其实你想在调用是空的话,直接用info?has_content 就可以了。
哈哈, 结贴。
<#macro judgeImage info image="images/N_n2pic.gif">
<#if info?exists >
<dt><a href="/info/detail.do?id=${info.id}"><img src="${info.image?default('images/N_n2pic.gif')}" width="95" height="85"/></a></dt>
<#else>
<dt><img src="${image}" width="95" height="85"/></dt>
</#if>
</#macro>
今天早上仔细看了下, 也顺便查了下freemarker指令
原来info?exists只判断变量是否存不存在而不管是否为空。
map里面有这个变量。 所以这里的结果是true。因此执行到下一步获取info的属性值, 结果就报未定义错误。
<#if info?exists && info?has_content>改成这样即可。
info?has_content判断该变量是否不为null并且不为empty
zuixinloupandata是单个对象。
还是不行哦。
始终过不了<#macro judgeImage info image="images/N_n2pic.gif">这里的info
那就说明你的 info 是要求一个对象,而不是字符串,你应该给 info传递一个变量
<@judgeImage info=zuixinloupandata/>
不知道你的 zuixinloupandata 是个什么东西。
引用来自“红薯”的帖子
应该是这样引用宏:<@judgeImage info="zuixinloupandata"/>
应该是这样引用宏:<@judgeImage info="zuixinloupandata"/>