Работа с дефисами Apache Velocity 2.1 - это ошибка? - PullRequest
1 голос
/ 16 апреля 2019

Я поднял эту проблему в Списке рассылки Apache Velocity, но я не получил ответа, поэтому я публикую его здесь ...

Я использую недавно выпущенную Apache Velocity 2.1 и тестируюдефис в качестве имени идентификатора, но я попал в ошибку или что-то?Я установил свойство Velocity.PARSER_HYPHEN_ALLOWED, но оно разрешено только для отдельных данных, а не для данных карты или коллекции.

У меня есть этот шаблон:

hello-world.properties.vm 
---------------------------------------------------------- 
Slash: ${sample-slash}
Slash in a Map: ${map.sample-slash}

И у меня есть этопример тестового примера:

public class ApacheVelocityTest {
    private final String RESOURCES_DIR = "src/test/resources";

    @Test
    public void testVelocity() {
        Path templatePath = Paths.get(RESOURCES_DIR, "templates", "hello-world.properties.vm");


        VelocityEngine ve = new VelocityEngine();
        ve.setProperty(Velocity.PARSER_HYPHEN_ALLOWED, true);

        ve.init();
        Template t = ve.getTemplate(templatePath.toString());

        VelocityContext context = new VelocityContext();

        context.put("sample-slash", "SLASH");

        Map<String, String> sampleData = createData();
        context.put("map", sampleData);

        StringWriter writer = new StringWriter();
        t.merge(context, writer);

        System.out.println(writer.toString());
    }

    public Map<String, String> createData() {
        Map<String, String> mapData = new HashMap<String, String>();

        mapData.put("sample-slash", "USER1");

        return mapData;

    }
}

Теперь первый «образец-косая черта» отображается правильно, но тот, который находится в карте Java, не ... он выдает ошибку, подобную этой:


org.apache.velocity.exception.ParseErrorException: Encountered "-slash}" at src\test\resources\templates\hello-world.properties.vm[line 5, column 22]
Was expecting one of:
    "[" ...
    "|" ...
    "}" ...
    "}" ...

    at org.apache.velocity.Template.process(Template.java:154)

Исключение синтаксического анализатора вызывается объектом, встроенным в карту Java.

Есть ли у меня какое-либо решение для этого разработчика?Любые указатели очень ценятся.

1 Ответ

0 голосов
/ 16 апреля 2019

Это ошибка в режиме обратной совместимости parser.allow_hyphen_in_identifiers в версии 2.1.

Вы можете обойти это:

$map.get("sample-slash")

или

$map["sample-slash"]

Ошибка исправлена ​​в основной ветке разработки.

...