gpt4 book ai didi

java - 将自定义对象从 thymeleaf View 传递到 Controller

转载 作者:行者123 更新时间:2023-11-30 01:47:46 24 4
gpt4 key购买 nike

尝试将使用 th:value 的自定义对象从 View 传递到 Controller ,但只能通过 th:value 传递 Java 的原始数据类型。有什么方法可以通过 th:value

发送复杂对象

我是 Spring 新手,正在尝试一些随机的事情。这是一个简单的网络应用程序。

我想做的事情:

我有一个创建团队的表格。该表单包括一个用于团队名称的文本字段和一组用于选择团队成员的复选框。对于每个选定的复选框,相应的成员应添加到团队列表中。

我尝试使用 thymeleaf 的 th:value 属性将对象从 View 传递到 Controller 。但我只能使用 th:value 传递字符串值

teamCreationForm.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Create your Team</title>
</head>
<body>
<h1>Create your dream team</h1>

<form method="post" th:object="${team}">

<span>Name of the team</span>
<input type="text" th:field="*{name}">

<div th:each="player : ${playersList}">
<input type="checkbox" name="players" th:value="${player}" th:valueType="com.example.kkvamshee.Cricket.Player">
<span th:text="${player.name}">Player Name</span>
</div>

<button type="submit">Submit your team</button>
</form>
</body>
</html>
创建团队 Controller .java
package com.example.kkvamshee.Cricket.web;

import com.example.kkvamshee.Cricket.Player;
import com.example.kkvamshee.Cricket.Team;
import com.example.kkvamshee.Cricket.data.JdbcPlayerRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.validation.Valid;
import java.util.List;

@Slf4j
@Controller
@RequestMapping("/create-your-team")
public class CreateTeamController {

....

@GetMapping
public String showSelectTeamPage(Model model) {
List<Player> playersList = playerRepo.findAll();

model.addAttribute("playersList", playersList);
model.addAttribute("team", new Team());

return "teamCreationForm";
}

.....

}

团队.java
package com.example.kkvamshee.Cricket;

import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

@Data
public class Team {
@NotNull private String name;

@Size(min = 3, max = 3, message = "You can only have 3 members on the team")
private List<Player> players;
}

错误日志

Field error in object 'team' on field 'players': rejected value [Player(name=vamshee, age=20, exp=1),Player(name=messi, age=32, exp=18),Player(name=ronaldo, age=34, exp=18)]; codes [typeMismatch.team.players,typeMismatch.players,typeMismatch.java.util.List,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [team.players,players]; arguments []; default message [players]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'java.util.List' for property 'players'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.example.kkvamshee.Cricket.Player' for property 'players[0]': no matching editors or conversion strategy found]

在该错误日志的末尾,有“未找到匹配的编辑器或转换策略”。

我尝试将 th:valueType 更改为 Integer,它成功地将相应的文本转换为整数值。但我在使用团队对象或任何其他自定义对象执行相同的操作时遇到此类型转换错误。

最佳答案

Thymeleaf 可以知道您正在使用哪个对象,特别是如果您正确映射了它并适本地接受了它。看看我用你的代码做的测试。

请注意表单中如何介绍该操作。

enter image description here

enter image description here

enter image description here

关于java - 将自定义对象从 thymeleaf View 传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com