前个项目用了freeer但是不知道freeer的标签是咋样解析了,
比如 ${x?html}为啥就可以 把 所有的html标签有关的给转义了呢?
它是咋样调用freeer中的java方法的呢?

解决方案 »

  1.   

    先看看
    http://wiki.javascud.org/pages/viewpage.action?pageId=4208&decorator=printable你可以通过templatePath 上下文变量(context variable)指定一个路径(你的文件系统中的一个目录). 如果指定了该变量, 那么这个目录中的内容将会被优先寻找.    变量解析/决定(Resolution)    在FreeMarker中, 变量将会在多个位置进行寻找, 顺序如下:    值栈(value stack)    action上下文(action context)    Request范围(scope)    Session范围(scope)    Application范围(scope)    内建变量    注意action上下文在value stack后进行搜索. 这意味着你可以引用变量而不必使用标准的符号(#)前缀,不像在JSP中使用ww:property中必须使用的那种语法(译者注:现在在JSP中也可以不用#而访问默认的ValueStack). 这是一个很好的便利特性, 但是小心, 它有时也会把你陷进去. <@ww.url id="url" value="http://www.yahoo.com"/>    Click <a xhref="${url}">here</a>!    Webwork-FreeMarker整合提供的内建变量如下:    Name Description    stack 值栈本身, 方便使用 ${stack.findString('ognl expr')}的方式调用    action 最近执行的action    response HttpServletResponse    res 与response相同    request HttpServletRequest    req 与reqeust相同    session HttpSession    application ServletContext    base request的上下文路径(context path)    标签支持    FreeMarker是很棒的模版语言, 因为它完整的支持标签(tag). 参照WebWork提供的 FreeMarker Tags 文档中的如何使用通用(generic) Tags 部分获取更多信息. 除了那些, 你还可以使用任何的JSP标签(tag), 就像这样:    <#assign mytag=JspTaglibs["/WEB-INF/mytag.tld"]>    <@mytag.tagx attribute1="some ${value}"/>    这里 mytag.tld 是你使用的JSP标签库的定义文件. 注意: 为了使用FreeMarker的这个支持, 你必须开启 web.xml 2.1.x compatibility 文档中的 JSPSupportServlet.    提示和技巧    下面是在使用FreeMarker构建WebWork应用程序时的一些有用的进阶功能.    类型转换与本地化    FreeMarker内置支持日期与数字的格式化. 格式化的规则基于action request的地区信息(locale), locale是通过webwork.properties配置的, 它也可以通过I18n Interceptor进行覆盖. 这种方式一般会完美的满足你的需求, 但是你要记住, 这些格式化信息是通过FreeMarker处理的,而不是通过WebWork的类型转换支持实现.    如果你希望WebWork根据你所指定的类型转换处理格式化, 你不应该使用平常的&{...}语法. 取而代之, 你应该使用property标签. 区别在于property标签特别为OGNL表达式设计, 计算它的值, 然后将结果用你指定的Type Conversion转换为String. 平常使用的${...}语法则会使用FreeMarker的表达式语言(EL), 计算它的值, 然后通过内建的格式化规则转化为String. 这些区别甚微, 但是一定要了解.    扩展    有时你可能需要扩展WebWork提供的FreeMarker支持. 最常见的原因是你希望引入你自己的标签, 就像你扩展WebWork内建标签一样.    如果需扩展, 首先要新建一个继承 com.opensymphony.webwork.views.freeer.FreeerManager 并且重载了相应方法的类. 然后将下面代码添加到webwork.properties:    webwork.freeer.manager.classname = com.yourcompany.YourFreeMarkerManager    ObjectWrapper设置    如果你熟悉了FreeMarker, 你会发现它的敏感性会带来一些困扰. 最常见的方法就是尝试使用FreeMarker提供的BeanWrapper. 如果你不知道那是什么,别担心. 只要知道这些酒可以了:    WebWorkBeanWrapper继承自默认的FreeMarker BeansWrapper, 提供了基本完全一致的功能, 只是修改了maps处理机制. 一般, FreeMarker有两种操作模式: 一种支持友好的内置的map (key, values, etc),但是只支持String作为key; 或者特殊的内置支持(例如: key 返回map的相应方法而不是key), 但是它支持String和String相似的非String作为key. WebWork提供了两种情况下的可选的实现方案.    这种特殊的做法也许会让你迷惑或产生问题. 所以, 你可以将 webwork.properties 中的*webwork.freeer.wrapper.altMap*设置为false, 允许替换为常规的BeansWrapper逻辑.
      

  2.   

    如何在ftl中调用类的静态方法?
      

  3.   

    网上有FreeMarker_Manual_zh_CN.pdf 中文的很有用