Можно ли с помощью Thymeleaf создать ловимое исключение, если переменная шаблона не установлена? - PullRequest
0 голосов
/ 13 февраля 2019

Я реализовал синтаксический анализатор шаблонов в Spring-Boot, который использует тимелефлет TemplateEngine.Идея состоит в том, что пользователь отправляет имя шаблона, локаль и любые переменные, используемые в шаблоне, в контроллер.Переменные хранятся в объекте с именем ReplaceToken, который состоит из ключа и значения.Затем они добавляются в контекст с ключом в качестве имени переменной и значением в качестве значения.

Есть ли способ либо выбросить / перехватить ошибку, когда переменная не установлена?

В настоящее времяЕсли переменная отсутствует при обработке шаблона, Thymeleaf просто использует вместо этого текст-заполнитель.Например,

<span th:text="${thisVariableDoesntExist}>
Placeholder Text //This will be displayed
</span>

Я думал о синтаксическом анализе всей пост-обработки шаблона для значений, которые я мог установить заранее, указывая, что значения заполнителей все еще используются, но я бы предпочел решение, в котором меня нетразобрать обработанный шаблон.Я также как-то изучал использование нулевых значений, но я не мог понять правильную реализацию, так как я не буду знать, какие переменные должны быть установлены.

1 Ответ

0 голосов
/ 13 февраля 2019

Я бы определенно сделал это на контроллере, возможно, поддерживая статическую карту требуемых переменных для каждого шаблона, и отказывая в перенаправлении, если они не выполняются.Что-то вроде:

public class RedirectController {

    private static final Map<String, List<String>> REQUIRED_VARIABLES;
    static {
        REQUIRED_VARIABLES = new HashMap<>();
        REQUIRED_VARIABLES.put("template1", new ArrayList<>());
        REQUIRED_VARIABLES.get("template1").add("name");
        REQUIRED_VARIABLES.get("template1").add("surname");
        // ...
    }

    // ...
    public void redirect(String template, List<ReplaceToken> tokens) {
       for (String requiredVariable : REQUIRED_VARIABLES.get(template)) {
         // maybe overriding ReplaceToken.equals() or something
         if (!tokens.contains(requiredVariable)) { 
           throw new WhateverException("!");
         }
       }

       // ...
    }
}

Вы должны были бы поддерживать карту REQUIRED_VARIABLES, но по крайней мере вы могли бы выполнить проверку на контроллере и избежать анализа шаблонов, которые могли бы привести к ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...