被FreeMarker气死了,${…}的问题

生成JSP一个很典型的问题:JSP中使用了JSTL的c:out标记:<c:out value=${subject.name}>,显然这个${…}是不应该被FreeMarker解析的。我用Velocity的方法想当然的改成了<c:out value=\${subject.name}>,不行;于是又改成了<c:out value=$${subject.name}>,依旧不行……郁闷。花了一个小时浏览了一遍Designer Guilde, Programmer Guilde, FAQ, Referrence,没有找到我想要的结果。生闷气。

找到他的邮件列表,有人跟我有同样的问题:http://article.gmane.org/gmane.comp.web.freemarker.user/838 FreeMarker提供的方法居然是:将$换为%,然后用#replace指令或者?replace替换为’$'……馊主意,来气;继续往下看,果然提出这个问题的家伙狠狠批评了一顿:”I think that’s overstating the challenge considerably!” http://article.gmane.org/gmane.comp.web.freemarker.user/844 呵呵

算了,有解决办法总比没有强,先将就吧。

4 Responses to “被FreeMarker气死了,${…}的问题”

  1. lengwp Says:

    我用时报错:说没有
    如下:
    Failed to parse FreeMarker template for URL [login.ftl]; nested exception is freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgrError: Unknown directive: #replace on line: 37, column: 21, in template: login.ftl

    你是怎么在ftl里面:的.先谢了!

  2. jelly Says:

    2.3.6中没有

  3. 绿色使者 Says:

    下午也遇到了这个问题,想了一个解决方法,使用${‘$’}{subject.name}来转义,具体见blog

  4. dwangel Says:

    你可以考虑使用escape来避免对${}进行处理

    http://www.freemarker.org/docs/ref_directive_escape.html