0

没用过Apache velocity,但在当前项目中,我们使用这个库将数据填充到模板中。

想问一下是否可以替换模板内的标签,使用Velocity

我有这样的模板:

<head>
    <link href="conf/templates/template_style.css" rel="stylesheet" type="text/css"/>
</head>
<p>
    <span class="mention" data-id="295" data-value="${AutumnExams}">
        <span contenteditable="false">${AutumnExams}</span>
    </span>
</p>

并使用这样的代码:

private String applyDynamicContent(String templateHtmlData, List<DynamicContentPart> dynamicContentParts) throws ParseException {
   if (!dynamicContentParts.isEmpty()) {

       RuntimeServices rs = RuntimeSingleton.getRuntimeServices();
       SimpleNode sn = rs.parse(new StringReader(templateHtmlData), "Template body");
       Template template = new Template();
       template.setRuntimeServices(rs);
       template.setData(sn);
       template.initDocument();
       VelocityContext context = createVelocityContext(null, null);

       dynamicContentParts.forEach(dContent -> context.put(dContent.getPlaceholder(), dContent.getContent()));

       StringWriter writer = new StringWriter();
       template.merge(context, writer);
       return writer.toString();
   }
   return templateHtmlData;
}

我只替换:${AutumnExams}占位符。但是是否有可能替换整个 SPAN,例如基于data-value="${AutumnExams}"

我有 1 小时的使用经验velocity lib,因此将不胜感激代码方面的帮助。

4

2 回答 2

0

@gmcontessa 说的是正确的,您需要在跨度字段上使用 if-check。最简单的方法是检查该值是否不为空,然后在您的跨度中替换它:

#if ($!AutumnExams)
    <span class="mention" data-id="295" data-value="$!AutumnExams">
        <span contenteditable="false">$!AutumnExams</span>
    </span>
#end

使用$的主要原因!是检查你的变量是否有值,如果没有,它只会打印一个空字符串。当与 if-check 一起使用时,如果变量为空,则返回 false。

此外,如果您想对该速度变量的值运行特定的 if-check,您可以执行以下操作:

#if ("$!AutumnExams" == "Maths")
    <span class="mention" data-id="295" data-value="$!AutumnExams">
        <span contenteditable="false">Maths</span>
    </span>
#else
    ##Code here
#end
于 2018-09-07T13:43:02.907 回答
0

要替换整个标签,您需要根据您在模型中插入的参数使用 Velocity if 条件(更多信息在此页面)。然后,该参数可以基于后端的条件。

例如,如果您想拥有基于布尔“foo”变量的 span 标签的两个版本,请使用以下代码:

#if( $foo )
  <span class="mention" data-id="295" data-value="${AutumnExams}">
        <span contenteditable="false">${AutumnExams}</span>
    </span>
#else
<!-- second version of span -->
#end
于 2018-09-03T20:56:30.797 回答