如何从视图向Thymeleaf中的控制器发送复选框信息?

时间:2019-03-07 17:51:49

标签: java html spring-boot checkbox thymeleaf

我正在尝试发送循环的checbox的值以在控制器中打印它们。当我按下一个按钮时,我希望将所选checbox的信息发送到控制器并在控制台中打印它,但是当我按下我的按钮将信息发送到控制器方法时,它将抛出NullPointerException。 我的HTML看起来像这样:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Select Cities</title>
    <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <div class="row align-items-center">
        <div class="col-4 mt-3">
            <form action="">
                <div class="form-check"  th:each="names : ${namesOfCities}">
                    <label for="" class="form-check-label">
                        <input type="checkbox" name="lista" th:value="${names}" th:text="${names}">
                    </label>
                </div>
                <a href="#"th:href="@{/starbucks/showSelectedCities}" class="btn btn-primary">Aceptar</a>
            </form>
        </div>
        <div class="col-8">
            <div id="chart" style="height: 400px"></div>
        </div>
    </div>
</div>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/highcharts-3d.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="../js/jquery-3.3.1.min.js"></script>
<script src="../js/popper.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
</body>
</html>

在HTML中,我为控制器发送的列表中的每个元素创建了一个复选框。

我在Controller中有两种方法,第一种:

   @GetMapping("/selectCities")
    public ModelAndView selectCities(Model model){
        ModelAndView mav = new ModelAndView(ViewConstant.SELECT_CITIES);
        //List<String> citiesNames = namesOfCities();
        List<String> citiesNames = recortarList();
        model.addAttribute("namesOfCities", citiesNames);
        return mav;
    }

此方法显示HTML视图,并发送包含城市名称的字符串列表。

第二种方法如下:

@GetMapping("/showSelectedCities")
    public ModelAndView showSelectedCities(@RequestParam(name = "lista", required = false)List<String> id){
        ModelAndView mav = new ModelAndView(ViewConstant.SELECT_CITIES);
        for(int x=0;x<id.size();x++){
            System.out.println(id.get(x));
        }
        return mav;
    }

在这种情况下,我想获取视图发送的所选复选框的城市名称,并在控制台中打印它们,但是当我尝试运行时,抛出NullPointerException异常。如何正确地将信息从复选框发送到控制器?

1 个答案:

答案 0 :(得分:0)

您已经使用了表单,但是您无法通过链接提交信息。为了解决这个问题: 1)对表单执行以下操作:      2)并在表单内添加提交按钮。      这里 3)点击提交按钮,您将被重定向到操作网址。

现在您将在表格内填写信息。