首页 > 解决方案 > Freemarker 在我的 fo:table-body 之外动态引用标签

问题描述

我无法向您展示整个代码,但以下基本上是我在 fo-table-body 标记内生成动态代码所采取的步骤。

在 inside 的一个阶段<fo:table-body>,我希望能够引用名为“ref”的块并在 if 中更改值。这可能吗 ?

<#assign value="Hello World"/>
<fo:block name"ref">
      <fo:inline font-weight="bold">Value: </fo:inline>
      <fo:inline>${Value}</fo:inline>
    </fo:block>
    <fo:table-body start-indent="0pt">
    // All sorts of data inside the tags 
         <fo:table-row>
            <fo:table-cell></fo:table-cell>
         </fo:table-row> 
   </fo:table-body>

标签: freemarkerxsl-fo

解决方案


FreeMarker 模板在执行时会不断写入输出,因此如果您已经打印了一段输出,那么它不再掌握在 FreeMarker 手中。(它可能仍然位于 后面的某个缓冲区中Writer,但 FreeMarker 并没有意识到这一点。)虽然您可以做的是首先生成依赖部分 ( fo:table-body),但是捕获它而不是打印它,例如<#assign tableBody><fo:table-body...>...</fo:table-body></#assign>,然后生成依赖部分( fo:block) 像往常一样,然后打印捕获的部分(${tableBody}<#noescape>${tableBody}</#noescape>,具体取决于您使用的自动转义类型)。


推荐阅读