Как правильно проверить флажки с помощью Spring MVC и ThymeLeaf?

Я создал это существо, которое нуждается в некоторой проверке:

Как правильно проверить флажки с помощью Spring MVC и ThymeLeaf?

Это файл home.html:

<!-- Modal -->
    <div id = "vasoModal" class = "modal">
        <div class = "modal-content">
            <h4 class = "modal-title">Vasito</h4>
            <h6>Seleccione hasta dos gustos</h6>
            <form th:action = "@{/pedido}" name = "vasitoForm" method = "post">
                <table class = "tabla">
                        <tr th:each = "gusto : ${gustos}">
                            <td class = "flavour" th:text = "${gusto.nombre}"></td>
                            <td><input class = "single-checkbox" type = "checkbox" th:field = "${gusto.id}"/></td>
                        </tr>
                </table>
                <button type = "submit" class = "btn-submit">Enviar Pedido</button>
            </form>
        </div>
    </div>

Итак, теперь мне нужно проверить, какие из них были нажаты, и отправить это контроллеру для проверки:

var checkboxes = document.querySelectorAll('.single-checkbox');
var clicked = [];

checkboxes.forEach(elem => {
    elem.addEventListener('click', (event) => {
        event.stopPropagation();
        alert(elem.value);
        // My logic here was to add the clicked checkboxes to the clicked array and then send that to the controller to validate !!

Это нормально? }); });

Что ж ... У меня здесь две проблемы ... первая - это то, что эта строка в HTML не работает:

th:field = "${gusto.id}"

Я не могу привязать идентификатор каждого «gusto» (вкус на испанском) к флажкам (это казалось хорошим решением).

Я получаю следующую ошибку:

Neither BindingResult nor plain target object for bean name 'gusto' available as request attribute

Что ж ... Я искал это в Google и нашел решение, но не в моем случае, я отправляю ArrayList "gustos" в представление в контроллере.

@RequestMapping(value = "/")
public String getAllProductos(ModelMap modelMap){
    List<Producto> productos = productoService.findAll();
    List<Gusto> gustos = gustoService.findAll();
    modelMap.put("gustos", gustos);
    modelMap.put("productos", productos);
    return "home";
}

Так что это немного странная проблема!

Ну ... вторая проблема или вопрос - это то, что я хочу сделать после ее решения ... она прокомментирована в файле JS:

// My logic here was to add the clicked checkboxes to the clicked array and then send that to the controller to validate !!

Такой подход в порядке ?? Может ли кто-нибудь помочь мне найти лучшее решение для ошибки флажков?

...

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
268
1

Ответы 1

Для вашего первого выпуска th:field= потребуется * вместо $. Попробуйте сменить th:field = "${gusto.id}" на th:field = "*{gusto.id}" - документация здесь.

Во-вторых, я не уверен, что это самый изящный способ сделать это, но у меня он работает. Сначала добавьте HttpServletRequest request (документация здесь) в качестве параметра запроса в методе POST. Из этого request вы можете извлечь Map<String, String[]>, из которого вы можете извлекать данные. Затем вы можете делать то, что хотите с участием, эти данные:

Map<String, String[]> dataFeed = request.getParameterMap(); // this pulls in the data from the checkboxes

for (Map.Entry<String, String[]> entry : dataFeed.entrySet()) { // this iterates through each entry from the data above
        for (String str : request.getParameterValues(entry.getKey())) { // this loops through the key for each entry 
            Long yourVar = Long.parseLong(entry.getKey()); // assigning the long version of that str to yourVar
            if (str.equals("Yes")) {
                Do something with yourVar // do something with it
            }
            daoObject.save(whatever you've done above);
        }
    }

В вашем случае, возможно, сработает что-то вроде этого:

@RequestMapping(value = "saveGusto", method = RequestMethod.POST)
public String saveGusto(HttpServletRequest request) {

    Map<String, String[]> dataFeed = request.getParameterMap();

    for (Map.Entry<String, String[]> entry : dataFeed.entrySet()) {
        for (String str : request.getParameterValues(entry.getKey())) {
            Long gustoId = Long.parseLong(entry.getKey());
            Gusto gusto = gustoDao.findOne(gId);

            if (str.equals("some-value")) { // where some-value is value = "some-value" on your checkbox
                // do something with the gusto
            }
            gustoDao.save(gusto);
        }
    }
}

Надеюсь, это даст вам еще одну возможность для исследования, если не что иное!

Другие вопросы по теме