Spring Boot, проверка тимелистом для класса композиции - PullRequest
1 голос
/ 03 мая 2019

Как я могу проверить композиционные отношения в Thymeleaf / Spring Boot. У меня есть простой класс FundTrf, который "имеет" класс данных. Проблема заключается в том, что когда я проверяю входные данные формы, поля, относящиеся к классу FundTrf, проверяются, но поля, относящиеся к классу данных, не проверяются. Нужно ли делать дополнительные ставки между этими классами? Ниже я попробовал.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>HNB CEFT | Test Bed</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <h1>Form</h1>
        <form action="#" th:action="@{/ceft/fundTrf}" th:object="${fundTrf}" method="post">
            <table>
                <tr><td>Version </td><td><input type="text" th:field="*{version}" /></td>
                    <td th:if="${#fields.hasErrors('version')}" th:errors="*{version}">Version Error</td>
                </tr>
                <tr><td>Bank Code </td><td><input type="text" th:field="*{data.dest_bank_code}" /></td>
                    <td th:if="${#fields.hasErrors('data.dest_bank_code')}" th:errors="*{data.dest_bank_code}">Bank Code Error</td>
                </tr>
                <tr><td>Amount </td><td><input type="text" th:field="*{data.amount}" /></td>
                    <td th:if="${#fields.hasErrors('data.amount')}" th:errors="*{data.amount}">Amount Error</td>
                </tr>
            </table>
            <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
        </form>
    </body>
</html>

Ниже приведен мой класс контроллера.

@Controller
public class Hello  implements WebMvcConfigurer{

    @GetMapping("/ceft/welcome")
    public String welcomeForm(Model model) {
        model.addAttribute("fundTrf", new FundTrf());
        return "welcome";
    }

    @PostMapping("/ceft/fundTrf")
    public String ceftTransaction(@ModelAttribute @Valid FundTrf fundTrf,  BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            return "welcome";
        } else {
            return "result";
        }
    }
}

Ниже мой класс FundTrf

public class FundTrf {

    @NotEmpty
    private String version;
    private Data data;

    ..Getters and Setters
}

А это класс Data.

public class Data {

    @NotEmpty
    private String reqId;
    @NotEmpty
    private String frm_hnb_account;
    @NotEmpty
    private String dest_bank_account;
    @NotEmpty
    private String benificiary_name;
    @NotEmpty
    private String dest_bank_code;
    @NotEmpty
    @Size(min = 2, max = 30)
    private String amount;

    ..Getters and Setters
}

Проблема в том, что, когда я отправляю форму с пустыми значениями, появляется сообщение «Версия не должна быть пустой», но проверка суммы не работает. Что я тут не так делаю?

1 Ответ

1 голос
/ 03 мая 2019

Вы должны установить @Valid для объекта Data, чтобы свойства данных также были проверены.

public class FundTrf {

    @NotEmpty
    private String version;
    @Valid //ADDED VALID HERE
    private Data data;

    ..Getters and Setters
}

Javadoc для javax.validation. Valid говорит:

Помечает свойство, параметр метода или тип возвращаемого метода для каскадный валидация. Ограничения, определенные на объекте и его свойства проверяются, когда свойство, параметр метода или Тип возвращаемого значения метода проверен. Это поведение применяется рекурсивно.

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