我有以下目标。
public class Anonymization {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany(mappedBy = "anonymization")
private List<Host> hosts;
@OneToMany(mappedBy = "anonymization")
private List<Item> items;对象Host和Item有几个布尔字段。我想要显示一个表单,其中所有的主机和项目对象都显示为复选框,以便可以编辑布尔字段。我写了一个控制器来显示表单
@RequestMapping("monitoringsystem/{mId}/anonymization")
public String editAnonymisatzion(Model model, @PathVariable Long mId){
model.addAttribute("mId", mId);
model.addAttribute("anonymization", monitoringSystemRepository.findOne(mId).getAnonymization());
return "monitoringsystem/anonymizationForm";
}anonymizationForm应该在for-each循环中显示复选框。
<!-- more code --->
<form class="form-horizontal" th:modelAttribute="anonymization" th:object="${anonymization}" th:action="@{'monitoringsystem/' + ${mId} + '/anonymisatzion/save'}" method="post">
<input type="hidden" th:field="*{id}"/>
<fieldset>
<legend>Set Anonymization</legend>
<div class="panel panel-default">
<div class="panel-heading">Anonymizie Hostnames</div>
<div class="panel-body">
<div class="form-group" th:each="host : ${anonymization.hosts}">
<label class="col-md-4 control-label" for="checkboxes" th:text="${host.name}"></label>
<div class="col-md-4">
<div class="checkbox">
<label for="checkboxes-0">
<input th:field="${host.anonymizeName}" type="checkbox" />
anonymizie
</label>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Anonymizie Items</div>
<div class="panel-body">
<div class="form-group" th:each="item : ${anonymization.items}">
<label class="col-md-4 control-label" for="checkboxes" th:text="${item.name}"></label>
<div class="col-md-4">
<div class="checkbox">
<label for="checkboxes-0">
<input th:field="${item.anonymizeName}" type="checkbox" />
anonymizie name
</label>
</div>
<div class="checkbox">
<label for="checkboxes-0">
<input th:field="${item.anonymizeData}" type="checkbox" />
anonymizie data
</label>
</div>
</div>
</div>
</div>
</div>
<!-- more code --->不幸的是,当我调用视图时,我得到了以下错误
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'host' available as request attribute 我检查我的数据库所有的关系是正确的设置。List<Host>应该包含1和List<Item> 2条目。
我找不到我的错误。
更新1:
我调试了传递给窗体的匿名对象。已经完成了。这意味着所有的列表条目都存在。因此,我想这个错误与我的观点有关--我如何调用对象。
发布于 2016-10-30 13:48:51
我通过我自己找到了解决方案。首先,我改变了在表单中调用列表对象的方式。
<form class="form-horizontal" th:modelAttribute="anonymization" th:object="${anonymization}" th:action="@{'monitoringsystem/' + ${mId} + '/anonymisatzion/save'}" method="post">
<input type="hidden" th:field="*{id}"/>
<fieldset>
<legend>Set Anonymization</legend>
<div class="panel panel-default">
<div class="panel-heading">Anonymizie Hostnames</div>
<div class="panel-body">
<div class="form-group" th:each="host, statHost : *{hosts}">
<label class="col-md-4 control-label" for="checkboxes" th:text="*{hosts[__${statHost.index}__].name}"></label>
<div class="col-md-4">
<div class="checkbox">
<label for="checkboxes-0">
<input th:field="*{hosts[__${statHost.index}__].anonymizeName}" type="checkbox" />
anonymizie
</label>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Anonymizie Items</div>
<div class="panel-body">
<div class="form-group" th:each="item, statItem : *{items}">
<label class="col-md-4 control-label" for="checkboxes" th:text="*{items[__${statItem.index}__].name}"></label>
<div class="col-md-4">
<div class="checkbox">
<label for="checkboxes-0">
<input th:field="*{items[__${statItem.index}__].anonymizeName}" type="checkbox" />
anonymizie name
</label>
</div>
<div class="checkbox">
<label for="checkboxes-0">
<input th:field="*{items[__${statItem.index}__].anonymizeData}" type="checkbox" />
anonymizie data
</label>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="form-group">
<label class="col-md-4 control-label" for="singlebutton"></label>
<div class="col-md-4">
<a th:href="@{/monitoringsystem}" class="btn btn-default btn-small">Cancel</a> <button id="singlebutton" name="singlebutton" class="btn btn-primary btn-small">Submit</button>
</div>
</div>
</div>
</div>
</fieldset>
</form>此外,似乎有一个问题,命名的getter和策划者。我的就像:
setBoolean(boolean b){
this.b = b;
}
isBoolean(){
return b;
}Spring或thymeleaf (我不知道哪个组件负责)似乎需要getter从get开始。在改变了这个之后,它现在开始工作了。
setBoolean(boolean b){
this.b = b;
}
getBoolean(){
return b;
}https://stackoverflow.com/questions/40329419
复制相似问题