Java 从thymeleaf中的下拉选择中指定对象?
我有一个像这样的pojo课程Java 从thymeleaf中的下拉选择中指定对象?,java,html,spring-boot,spring-mvc,thymeleaf,Java,Html,Spring Boot,Spring Mvc,Thymeleaf,我有一个像这样的pojo课程 pulic class Role{ private int roleId; private String roleName; //default getters setters and constructors 另一个POJO类用户 public class User{ private String id; private String name; private Role role; // standard getters setters and cons
pulic class Role{
private int roleId;
private String roleName;
//default getters setters and constructors
另一个POJO类用户
public class User{
private String id;
private String name;
private Role role;
// standard getters setters and constructors
我的控制器类方法调用页面
@GetMapping("/adduser")
public String registerUserPage(Model model){
model.addAttribute("roles",roles.listRoles());
User user = new User();
user.setRole(new Role());
model.addAttribute("user",user);
return "adduser";
}
adduser.html
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form name="registerForm" th:action="@{/createUser}" th:object="${user}" method="POST">
<div><label> First Name : <input type="text" th:field="*{name}"/> </label></div>
<div><label> Id : <input type="text" th:field="*{id}"/> </label></div>
<select th:field="*{role}">
<option value="">Select Test Order</option>
<option th:each="role : ${roles}"
th:value="${role}"
th:text="${role.roleName}"></option>
</select>
<div><input type="submit" value="Add"/></div>
</form>
</body>
</html>
我可以从下拉列表中列出角色,还可以成功地分配其他值,如name和id。但是,当我试图将下拉列表分配给“*{role}”
时,它被破坏了
我得到一个例外:
default message [Failed to convert property value of type 'java.lang.String' to required type 'com.vipin.data.Role' for property 'role';
从异常中我看到它是一个异常。我知道我可能会分配一个角色Id,然后再对其进行处理。但是,由于角色中有两个值(roleName和roleId),如何直接分配角色对象?可能吗?从单个下拉选择中分配role(id和roleName)两个值的任何替代方法?一种方法是使用Spring类型转换服务将select的字符串值(如roleName)转换为角色实例 要使用此方法,需要执行几个步骤:
转换器的实例。就我们的情况而言,它可以是
公共类RoleNameToRoleConverter实现转换器
可以找到有关spring转换的更多详细信息
@配置
公共类WebConfig实现WebMVCConfiguer{
@凌驾
公共void addFormatters(FormatterRegistry注册表){
addConverter(新的rolenametorleconverter());
}
}
有关配置spring mvc类型转换的更多详细信息,请参见
th:value=“${role}”更改为th:value=“${role.roleName}”
default message [Failed to convert property value of type 'java.lang.String' to required type 'com.vipin.data.Role' for property 'role';