我有一个表格。创建或编辑用户。他们使用相同的形式。如果发送了用户对象,则将填充字段;如果用户为null,则这些字段为空。发送动作后,它会创建一个用户是否为空的用户,如果用户不为空,则会更新:
<div id="user-details-div" th:fragment="add-edit-user-form-fragment">
<form id="add-user-form" method="POST" th:action="@{/internal-user}" th:field="${user}">
<div class="form-group">
<input name="id" style="display:none"
th:value="${user} ? ${user.id} : ''"
type="text">
</div>
<div class="form-group">
<input autocomplete="off" class="form-control" name="firstname"
th:value="${user} ? ${user.firstname} : ''"
placeholder="Ad" type="text">
</div>
//some other fields
<button id="add-edit-user-btn" class="btn btn-info" type="submit">Add edit</button>
通过这些字段,它可以完美运行。但是我还需要另一个领域。这是用户类别:
private Long id;
private String firstname;
//and this
private UserStatusDTO status;
这是该子dto的类:
public class UserStatusDTO implements Serializable {
private Long id;
private String name;
因此,如果用户不为null,我也想添加此字段并使其预先选择。但是,即使我也无法绑定到后端字段。例如,
<div class="form-group">
<select class="form-control-file" id="select-user-role-drop-down"
name="status" th:field="${status.id}">
</select>
</div>
如果我只说这个,它说
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name
我也想放
status
或
status.id
或
*status
或
<div class="form-group">
<select class="form-control-file" id="select-user-role-drop-down"
th:field="*{status}" >
但是他们都不起作用。为什么它不能在后端绑定到dto?+
如果我这样做,
<div class="form-group">
<select th:valuetype="com.caner.ercan.backend.custom_model.UserStatusDTO"> class="form-control-file"
id="select-user-role-drop-down" name="status"
>
<option th:each="status : ${allStatusList}"
th:text="${status.name}"
th:value="${status}">
</option>
</select>
</div>
这一次说
Field error in object 'user' on field 'status': rejected value [UserStatusDTO{id=1, name='ACTIVE'}]
我也做了
th:value="${status.id}">
错误是
Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'user' on field 'status': rejected value [UserStatusDTO{id=1, name='ACTIVE'}]; codes [typeMismatch.user.status,typeMismatch.status,typeMismatch.com.ercan.caner.backend.custom_model.UserStatusDTO,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.status,status]; arguments []; default message [status]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.ercan.caner.backend.custom_model.UserStatusDTO' for property 'status'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.ercan.caner.backend.custom_model.UserStatusDTO' for property 'status': no matching editors or conversion strategy found]]