Попытка связать HashMap из модели MVC с переменной JavaScript - PullRequest
0 голосов
/ 04 ноября 2019

После моего недавнего поста: -

Каскадное выпадающее меню из HashMap в шаблоне Thymeleaf

Я добиваюсь постоянных успехов в попытке заставить работать каскадные выпадающие окна в моем SpringBoot, Приложение Thymeleaf.

Но в настоящее время я пытаюсь связать HashMap из моей модели MVC с переменной JavaScript, чтобы он затем был доступен для кода JavaScript, который генерирует параметры для раскрывающихся списков. Это то, что я пробовал до сих пор: -

  1. В моем классе контроллера я создаю HashMap, где ключ - это категория в виде строки, а значение - список связанных умений,где класс Skill - это объект данных Java, содержащий имя и идентификатор навыка: -

    Map<String, List<Skill>> skillsMap = new HashMap();

  2. В моем шаблоне Thymeleaf в разделе сценария я пытаюсьпривязать этот HashMap к переменной. На втором этапе я пытаюсь извлечь один из списков с карты и назначить вторую переменную: -

    var skillsMapMap = [[${skillsMap}]];

    var adminList = skillsMapMap.get('Admin');

  3. Когда я запускаю код в режиме разработчика, я вижу, что HashMap читается и делается попытка связать его с моей переменной. Это строка отладки, которую я вижу: -

    var skillsMapMap = {Languages=[Python, SQL, PL/SQL, Java], Databases=[MySQL, Oracle, Mongo], Editors=[Word, TextPad, Notepad]};

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

Uncaught Syntax Error: invalid shorthand property initializer

Я искал эту ошибку и обнаружил, что она обычно вызывается с помощью «=» для присвоения значений, а не «:», и действительно, я вижу, что каждая из записей в моемкарта назначается с помощью '='.

Буду очень признателен за любые советы по этому вопросу. Возможно, весь мой подход неверен, и я не должен пытаться связать объект сложной модели с переменной JavaScript таким образом? Или, может быть, мне просто нужно немного подправить синтаксис, чтобы он заработал? Большое спасибо за прочтение.

РЕДАКТИРОВАТЬ: -

Следуя совету пользователя 1538301, я сейчас пытаюсь преобразовать мой HashMap в строку JSON с помощью ObjectMapper Jackson перед добавлением в модель: -

    String objectMapper = null;
    try {
        // Default constructor, which will construct the default JsonFactory as necessary, use SerializerProvider as its
        // SerializerProvider, and BeanSerializerFactory as its SerializerFactory.
        objectMapper = new ObjectMapper().writeValueAsString(skillsMap);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    model.addAttribute("skillsMapJson", objectMapper);

Когда я пытаюсь связать это с моей переменной JavaScript, происходит сбой, потому что все кавычки экранированы: -

var skillsMapJson = {&quot;Languages_OD&quot;:[{&quot;id&quot;:66,&quot;name&quot;:&quot;SQL&quot;},{&quot;id&quot;:67,&quot;name&quot;:&quot;PL/SQL&quot;}], etc, etc};

Это вызывает исключение: Uncaught SyntaxError: Unexpected token &

Я чувствую, что это на шаг ближе, и что если строка JSON содержит кавычки вместо «Карта, то она будет привязана к моей переменной. Любой другой совет очень ценится!

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