Freemarker自定义指令功能应用
来源:互联网 发布:淘宝怎么一键上传宝贝 编辑:程序博客网 时间:2024/05/18 03:58
/**
* 之前用freemarker,在前端页面处理时候总觉得它的字符串截取功能不强,但是一直没有多费时间解决。
* 最近有点儿时间,总算优化了下它,靠的,还是freemarker的自定义指令功能。
* 需求:页面上给出了一个固定宽度的位置(如30px),然后将不定长的字符串填充满这个区域(字符串由字母、数字、符号和汉字组成) *
* 多余的字符串必须给予截掉,不管是字母,还是汉字,都必须将此区域最大限度的填满
*
* 问题:如采常规方式,采用ftl写一个macro或者function,然后截取指定长度的字符串,遇到字母与汉字混合,就肯定会有问题,因为一个汉字宽度是一个字母宽度的两倍,依据其中任何一个来计算,都会有问题
*
* 为此,专门写了个函数 Substr
* 功能:指定长度截取等宽字符串, 解决汉字与字母混合情况下的字
*
* 第一,写个类:Substr
* 第二,在系统启动的时候进行注册包含有此函数的类
* 第三,在.ftl文件中应用,就像使用freemarker的内置函数一样方便
*
*/
// 下面是主要的清单:
// 第一步
import java.util.List;
import freemarker.template.SimpleScalar;
import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModelException;
public class Substr implements TemplateMethodModel {
// 这里的长度计算,以汉字为标准,两个字母作为一个字符
public Object exec(List args) throws TemplateModelException {
if(args.size()!=2)
throw new TemplateModelException("Wrong arguments!");
int length=2*Integer.parseInt(args.get(1).toString(),10);
char[] arraySource=String.valueOf(args.get(0)).toCharArray();
StringBuffer result=new StringBuffer("");
for(char c:arraySource){
int ASCIICode=(int)c;
if(ASCIICode<=255){
length-=1;
}else{
length-=2;
}
result.append(c);
if(length==0)break;
}
return new SimpleScalar(result.toString());
}
}
// 第二步:
// 先写了个简单的servlet小试下,
public class HelloServlet extends HttpServlet {
private Configuration cfg;
public void init() {
cfg = new Configuration();
// 告诉servlet你的ftl文件存放目录
cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Map root = new HashMap();
Template t = cfg.getTemplate("test.ftl"); // 给定测试用的ftl文件
resp.setContentType("text/html; charset=" + t.getEncoding());
Writer out = resp.getWriter();
try {
// 在比较单一的环境下,可以直接这样使用
root.put("substr",new Substr());
t.process(root, out);
out.flush();
} catch (TemplateException e) {
throw new ServletException(
"Error while processing FreeMarker template", e);
}
}
}
// 第三步应用,ftl文件就不贴了,主要有两句
<#assign aboutname="some周三123thing456"/>
${substr(aboutname,4)}
- Freemarker自定义指令功能应用
- [Freemarker] freemarker自定义指令
- freemarker的自定义指令
- FreeMarker自定义指令
- freemarker 自定义指令
- 6、freemarker自定义指令
- Freemarker自定义指令
- freemarker自定义指令
- freeMarker自定义指令
- Freemarker自定义指令
- freemarker -自定义指令
- Freemarker自定义指令
- freemarker自定义函数、指令
- freemarker自定义指令(七)
- Freemarker自定义方法和指令
- Freemarker自定义指令之宏
- FreeMarker 自定义指令(三)
- FreeMarker自定义指令--代码实现
- 又开始郁闷了
- gridview进行数据绑定
- nvidia sdk 9.5 例子学习笔记(绪论)
- Oracle exp/imp导出导入工具的使用
- CAS SSO 原理(转载)
- Freemarker自定义指令功能应用
- float存储格式及FPU
- 沿着“重用”我们一路走来——SA、OO(DP)、Component、SOA、AOP
- nvidia - TNT(vendor/device id sample )
- Struts复习心得
- TestDirector介绍
- c语言中volatile的使用!
- 计算器源代码
- 《科技资讯》征稿函