簡體   English   中英

在Java中替換Apache Velocity中的標記

[英]Replace tag in Apache velocity in java

尚未使用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經驗,因此希望獲得代碼幫助。

要替換整個標簽,您將需要根據要插入模型的參數使用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

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM