1. 编写函数
?
?
?
public class FtlCheckPermissionMethod implements TemplateMethodModel { @SuppressWarnings("rawtypes") @Override public Object exec(List args) throws TemplateModelException { String permissionsStr = args.get(0).toString(); String permission = args.get(1).toString(); String[] permissionsArray = permissionsStr.split(SessionUtil.PERMISSION_SPLIT); for (String per : permissionsArray) { if (permission.equals(per)) { return true; } } return false; } }
?
?
2.注册与使用
?? 有两种方式:
(1).在模板文件中注册,在模板中使用
?
?
<#assign checkPermission= "com.beyondsoft.common.util.FtlCheckPermissionMethod"?new()> <#macro leftMenu menu> <div class="left_block clearfix"> <div class="leftmenu"> <ul> <#if checkPermission(permissions,"VW_ACCOUNT")> <li <#if menu == "Account_Management">class="on"</#if>><a href="javascript:windowLocationHref('${base}/account/initAddNewAccount.do');">Account Management</a></li> </#if> <#if checkPermission(permissions,"VW_ROLE_MANAGEMENT")> <li <#if menu == "Role_Management">class="on"</#if>><a href="javascript:windowLocationHref('${base}/role/initRoleManagement.do');">Role Management</a></li> </#if> <#if checkPermission(permissions,"VW_RESET_PASSWORD")> <li <#if menu == "Reset_Password">class="on"</#if>><a href="javascript:windowLocationHref('${base}/reset/initReset.do');">Reset Password</a></li> </#if> <#if checkPermission(permissions,"VW_REVIEW_HISTORY")> <li <#if menu == "Review_History">class="on"</#if>><a href="javascript:windowLocationHref('${base}/review/review.do');">Review History</a></li> </#if> </ul> </div> <span></span> </div> </#macro>
?
?
?(2).处理模板文件时注册
关键代码:
Map<String,Object> root=new HashMap<String, Object>(); root.put("getSysdate", new StringLengthMethod()); Configuration config=new Configuration(); File file=new File(templatePath); //并加载模板文件 config.setDirectoryForTemplateLoading(file); //设置包装器,并将对象包装为数据模型 config.setObjectWrapper(new DefaultObjectWrapper()); //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致 Template template=config.getTemplate(templateName,templateEncoding); //合并数据模型与模板 template.process(root, out);
?