在Java中替换Apache Velocity中的标记

时间:2018-09-03 20:39:14

标签: java velocity apache-velocity

还没有使用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}"

我在velocity lib上有1个小时的工作经验,因此希望获得代码方面的帮助。

2 个答案:

答案 0 :(得分:0)

要替换整个标签,您需要根据插入模型中的参数使用Velocity if条件(more info at this page)。 然后,该参数可以基于后端中的条件。

例如,如果要基于布尔“ 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

答案 1 :(得分:0)

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

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

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

此外,如果要对速度变量的值进行特定的if检查,则可以执行以下操作:

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