HTML编辑器删除<table>标记内的FreeMarker标记

问题描述

我使用FreeMarker构建从电子邮件到发票模板的各种模板。我现在正在寻找的问题与FreeMarker代码在表标记之外提取有关,因为HTML不允许tbody,thead,tr之外的其他字符包含在其中。

如果有人知道如何绕过它,将感到高兴。

示例:

<table>
                    <tbody>
                        [#assign eventDetails = []]
                        [#if items?? && items?has_content]
                            [#list items as item]
                                <tr>
                                    <td  style="padding: 5px;vertical-align: top;border-bottom: 1px solid #eee; text-align: center;">
                                        ${item.name}
                                    </td>
                                </tr>
                            [/#list]
                        [/#if]
                    </tbody>
                </table>

在使用element.innerHTML应用于编辑器后变为:

[#assign eventDetails = []]
[#if items?? && items?has_content]
  [#list items as item]
  [/#list]
[/#if]
<table>
                    <tbody>
 
                                <tr>
                                    <td  style="padding: 5px;vertical-align: top;border-bottom: 1px solid #eee; text-align: center;">
                                        ${item.name}
                                    </td>
                                </tr>
                    </tbody>
                </table>

解决方法

它当然仅取决于您使用的HTML编辑器,但是如果发生以下情况,则应尝试进行以下操作:

  • 您正在使用<#...>语法。对于编辑器来说,它看起来像是一些未知的标签,而不是CDATA,所以也许它的反应方式不一样。
  • <tbody>...</tbody>替换为[@html.tbody]...[/@html.tbody]。这样,编辑者可能就不足以删除内容。或者,与[@html.table]等相同,虽然很尴尬,但可能会比现在更好。 (要使该模板在运行模板时真正起作用,您必须在tbody名称空间中定义html宏。它不是内置的。)

最后一个示例:

<#ftl output_format='HTML'>

<#macro table attrs...><@elementWithNested 'table' attrs><#nested></@></#macro>
<#macro tbody attrs...><@elementWithNested 'tbody' attrs><#nested></@></#macro>

<#macro elementWithNested elementName attrs>
<${elementName}<#if attrs?size != 0><#list attrs as k,v> ${k}="${v}"</#list></#if>>
<#nested>  
</${elementName}>
</#macro>

如果以上模板是#import-ed为html,则<@html.table foo="bar">...</@html.table>等将起作用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...