我有一个简单的文本输入字段,我必须从一个对象设置默认值并将其最终值保存在其他对象中。以下代码无效。
<div th:object="${form}">
<input class="form-control"
type="text"
th:value="${client.name}" //this line is ignored
th:field="*{clientName}"/>
</div>
表单是DTO对象,客户端是数据库中的实体对象。
解决这种情况的正确方法是什么?
通过不工作我的意思是 - 假设初始值是client.name =“Foo”和form.clientName = null。 我需要输入字段显示值为“Foo”,并在表单提交form.clientName值后变为“Foo”。但是输入字段没有显示任何内容,并且在提交form.clientName值仍然为null;
如果有人有兴趣,请使用以下结构解决此问题(在另一个问题中找到答案)。
th:attr="value = ${client.name}"
答案 0 :(得分:39)
你可以采用这种方法。
而不是使用th:field
使用html id
&amp; name
。使用th:value
<input class="form-control"
type="text"
th:value="${client.name}" id="clientName" name="clientName" />
希望这会对你有所帮助
答案 1 :(得分:1)
如果您不必返回页面即可保留表单的值,则可以执行以下操作:
<form method="post" th:action="@{''}" th:object="${form}">
<input class="form-control"
type="text"
th:field="${client.name}"/>
这是一种魔术:
如果您要保留表单的输入值,例如页面上出现用户输入错误,那么您将必须这样做:
<form method="post" th:action="@{''}" th:object="${form}">
<input class="form-control"
type="text"
th:name="name"
th:value="${form.name != null} ? ${form.name} : ${client.name}"/>
这意味着:
无需将客户Bean映射到表单Bean。 它之所以有效,是因为一旦您提交了表单,该值就不会为空,而是“”(空)
答案 2 :(得分:0)
答案 3 :(得分:0)
所以您需要做的是用th:name替换th:field并添加th:value,th:value将具有您要传递的变量的值。
<div class="col-auto">
<input type="text" th:value="${client.name}" th:name="clientName"
class="form control">
</div>
答案 4 :(得分:-4)
它有两种可能的解决方案:
1)您可以通过javascript ...(不推荐)
在视图中进行设置<input class="form-control"
type="text"
id="tbFormControll"
th:field="*{clientName}"/>
<script type="text/javascript">
document.getElementById("tbFormControll").value = "default";
</script>
2)或者更好的解决方案是在模型中设置您在控制器的GET操作中附加到视图的值。您还可以更改控制器中的值,只需从$ client.name创建一个Java对象并调用setClientName。
public class FormControllModel {
...
private String clientName = "default";
public String getClientName () {
return clientName;
}
public void setClientName (String value) {
clientName = value;
}
...
}
我希望它有所帮助。