Заменить тег в скорости Apache в Java - PullRequest
0 голосов
/ 03 сентября 2018

Не используется 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, поэтому буду признателен за помощь с кодом.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

То, что @gmcontessa сказал правильно, вам нужно будет использовать проверку if в вашем поле span. Проще всего было бы проверить, не является ли значение нулевым, а затем просто заменить его в вашем диапазоне:

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

Основная причина использования $! проверить, имеет ли ваша переменная значение или нет, и если нет, то просто выведет пустую строку. При использовании с проверкой if она возвращает false, если переменная пуста.

Также, если вы хотите выполнить конкретную проверку if для значения этой переменной скорости, вы можете сделать это:

#if ("$!AutumnExams" == "Maths")
    <span class="mention" data-id="295" data-value="$!AutumnExams">
        <span contenteditable="false">Maths</span>
    </span>
#else
    ##Code here
#end
0 голосов
/ 03 сентября 2018

Чтобы заменить весь тег, вам нужно будет использовать условие Velocity, если ( дополнительная информация на этой странице ) основано на параметре, который вы вставляете в модель. Этот параметр может быть основан на условии в бэкэнде.

Например, если вы хотите иметь две версии тега span на основе логической переменной "foo", используйте следующий код:

#if( $foo )
  <span class="mention" data-id="295" data-value="${AutumnExams}">
        <span contenteditable="false">${AutumnExams}</span>
    </span>
#else
<!-- second version of span -->
#end
...