После моего недавнего поста: -
Каскадное выпадающее меню из HashMap в шаблоне Thymeleaf
Я добиваюсь постоянных успехов в попытке заставить работать каскадные выпадающие окна в моем SpringBoot, Приложение Thymeleaf.
Но в настоящее время я пытаюсь связать HashMap из моей модели MVC с переменной JavaScript, чтобы он затем был доступен для кода JavaScript, который генерирует параметры для раскрывающихся списков. Это то, что я пробовал до сих пор: -
В моем классе контроллера я создаю HashMap, где ключ - это категория в виде строки, а значение - список связанных умений,где класс Skill - это объект данных Java, содержащий имя и идентификатор навыка: -
Map<String, List<Skill>> skillsMap = new HashMap();
В моем шаблоне Thymeleaf в разделе сценария я пытаюсьпривязать этот HashMap к переменной. На втором этапе я пытаюсь извлечь один из списков с карты и назначить вторую переменную: -
var skillsMapMap = [[${skillsMap}]];
var adminList = skillsMapMap.get('Admin');
Когда я запускаю код в режиме разработчика, я вижу, что 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 = {"Languages_OD":[{"id":66,"name":"SQL"},{"id":67,"name":"PL/SQL"}], etc, etc};
Это вызывает исключение: Uncaught SyntaxError: Unexpected token &
Я чувствую, что это на шаг ближе, и что если строка JSON содержит кавычки вместо «Карта, то она будет привязана к моей переменной. Любой другой совет очень ценится!