Freemarker 之 Hashes 处理
昨天用Freemaker 处理了一个模板的问题,需求是这样的:
根据当前登录人员的角色,进而判断他是否有某个页面上的访问某些功能的操作权限,其实这个应该用数据库里的ACL 来实现,但我对这个也不是太专业,也没有充足的时间进行钻研,系统设计中的现在也没有那样做,于是就想到了Freemarker了,我也不知道用它是否正确,但目前考虑是实现其功能。在遇到 从Struts2的Action中传一个 priorityMap到 Freemarker。
在Freemaker中 Hashes 以及List 的用法简单例子如:
<#assign myMap = {“name”:”jakemanse”,”age”:26,”sex”:”Man”}> //定义了一个简单的Map
<#assign keys = myMap?keys> // 定义并赋值keys
<#assign keys = myMap?values> // 定义并赋值values
<#list keys as key>
${key} = ${h[key]};
</#list>
<#list values as value>
${value}
</#list>
具体使用:
<#assign key="新增工单">
<@s.if test="${priorityMap[key]}==true">
...
...
</@s.if>
这样正常的情况下,是没有问题的,但是在priorityMap 中 找不到对应的key的value 值时,${priorityMap[key]}就会发生异常,一开始我一直都没有找到其原因,结果一个个小尝试才知道是怎么回事。所我就对此判断进行相应的改良:
<#assign column=0>
<#assign keys = priorityMap?keys>
<#list keys as key>
<#if key=”…”>
<@s.if test="${priorityMap[key]}==true">
显示HTML 相关的内容
</@s.if>
<#if key=”…”>
</#list>
这样就可以解决,找不到key对应的value值而产生的异常了。问题是解决了,但我不知道这是不是最佳的处理方法。