当前位置: 代码迷 >> Web前端 >> Freemarker自定义函数的施用
  详细解决方案

Freemarker自定义函数的施用

热度:193   发布时间:2012-09-18 16:21:42.0
Freemarker自定义函数的使用

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);

?