【问题标题】:Java Spring - Thymeleaf return null object to controllerJava Spring - Thymeleaf 将空对象返回给控制器
【发布时间】:2018-05-28 21:16:06
【问题描述】:

我有一个页面,其中包含有关数据库中计算器结果的信息。当我尝试单击一个按钮到下一页时,如果我会检查更多详细信息,那么 java catch 异常:

The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null!

为什么我有这个错误?

我的控制器:

@GetMapping("/form")  
    public String selectData(Model model){  
        model.addAttribute("calcResults", calculatorRepository.findAll());
        return "user/form";  
    } 

-

@PostMapping("/show")
public String showDetails(@ModelAttribute(value = "calcResults") CalculatorResult calcResults,Model model){
    System.out.println(calcResults.getId());
    model.addAttribute("calcResults", calculatorRepository.findOne(calcResults.getId()));
    return "user/show";
} 

-

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:th="http://www.thymeleaf.org">
    <head>
        <link rel="stylesheet" href="style.css" type="text/css"/>
        <script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  ></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/printThis/1.12.3/printThis.js"></script>

        <title>Result</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link type="text/css" rel="stylesheet" th:href="@{css/bootstrap.min.css}" />
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    </head>
    <body>
            <form action="#" th:action="@{/show}" th:object="${calcResults}" method="post">
            <div class="col-md-4">
        <h1>Historia</h1>
            </div>

            <div style="padding:0 20px"/>

                <table class="table table-striped">
                        <tr>
                            <th>ID</th>
                            <th>Data Wyjazdu</th>
                            <th>Data Przyjazdu</th>
                            <th>Akcja</th>
                        </tr>  
                <tr th:each = "calc : ${calcResults}">
                        <td th:text="${calc.id}"></td>
                        <td th:text="${#dates.format(calc.dataWyjazdu, 'dd-MM-yyyy')}"></td>
                        <td th:text="${#dates.format(calc.dataPrzyjazdu, 'dd-MM-yyyy')}"></td>

                        <td>
                            <button type="submit" class="btn btn-success btn-xs">Przelicz</button>
                            <!--<a th:href="@{/sucess}" class="btn btn-success btn-xs">Szczegóły</a>-->
                        </td>
                </tr>
            </table>
            </form>
    </body>
</html>

【问题讨论】:

    标签: java spring model-view-controller thymeleaf


    【解决方案1】:

    您的绑定不正确。您缺少两件事:

    1. 使用 th:field 属性而不是 th:text 属性。这就是为什么 id 没有绑定到相应的对象。
    2. 看起来绑定到“calcResults”的对象是一个对象列表。我从来没有让它那样工作。我认为动态绑定通常不起作用。解决方法:创建一个具有数组属性的包装类 CalcResult,例如被称为项目(替换您的列表)... +以下代码:

      <tr th:each="calc, stat : *{items}">
        <input type="text"
           th:field="*{items[__${stat.index}__].id}">
        /* other fields of the objects stored in the array has to be insert here like in the line above */
      </tr>
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多