【问题标题】:FreeMarker cannot seem to parse HTML 5 data-* atttributesFreeMarker 似乎无法解析 HTML5 data-* 属性
【发布时间】:2010-10-14 23:29:02
【问题描述】:

我编写了一个简单的自定义指令,并将所有属性作为常规元素属性传递。标签的语法如下:

做得到@>

不幸的是,我得到了一个例外:

原因:freemarker.core.ParseException:在 unobtrusive/index.ftl 中的第 32 行第 56 列遇到“-”。 期待: “=” ...

这是因为它似乎无法解析“data-target”属性。当我用下划线将其更改为“data_target”时,一切都很好......但我真的需要破折号:“-”。

有人可以帮忙吗?

谢谢,

伊戈尔

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    从 2.3.22 开始,您可以使用 -(以及 .:)作为任何名称的一部分,前提是您在其前面带有 \,例如 <@link_to data\-target=...>。 (不太可爱,但- 已经被用作减法运算符,修复它不会向后兼容,因此必须等待主要的 FTL 版本增加。)

    【讨论】:

    • 感谢您修复它。似乎正在工作。但是 IntelliJ 14.1.2 将此标记为错误。是否有机会在 IntelliJ 中修复此语法?
    • 您应该将此报告给维护该插件的人(我猜是 JetBrains)。作为临时解决方法,他们可能会调用 Freemarker 来检查模板语法,在这种情况下,您可以手动替换插件使用的 freemarker.jar
    【解决方案2】:

    您的问题是 - 但在这种情况下,它没有被用作 HTML 标记,它是自定义指令的 FTL 参数。 FTL 显然不喜欢变量名中的破折号,但这不会阻止您在输出中包含破折号。

    你没有包含你的指令,但我认为你试图完成的事情可能看起来像这样。只需在宏中写入链接,将 data_target 引用为 ${data_target}。注意结果有 data-target 作为输出。

    <#macro link_to controller action data_target>
         Here is the controller: ${controller}  
         Here is the action: ${action}
         Here is the data-target: ${data_target}
    </#macro> 
    
    <@link_to controller="unobtrusive" action="do-get" data_target="result"></@>
    

    【讨论】:

    • 安迪,感谢您的快速回复,但这无济于事。我不是把它写成宏,而是写成一个 Java 类。无论如何,我可以做下划线,这很有效,但这不是我需要的。我需要一个破折号:“-”
    • Freemarker 是一种模板语言,对 HTML 一无所知。是的,freemarker 经常用于生成 html,但它不会解析它,而且它肯定不会因为某些 html 特性而被绊倒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多