您好我是初级MVC并且正在尝试实现一个表单:checkboxes标签并遇到了一些问题。我用google搜索的所有例子都和Strings一起工作,我想和对象一起工作,所以我希望有人可以提供建议。
我在DTO中设置了一个对象列表,如下所示:
TestDTO
private List<Barrier> barriers;
public List<Barrier> getBarriers() {
return barriers;
}
public void setBarriers(List<Barrier> barriers) {
this.barriers = barriers;
}
在我的控制器类中,我从数据库中获取屏障对象并将它们添加到我的DTO中,然后将其传递给jsp
savedRecord.setBarriers(dataService.getBarriers());
mav.addObject("testDto", savedRecord);
在我的JSP中,我使用form:checkboxes标签,如下所示:
<form:checkboxes path="barriers" items="${testDto.barriers}" element="label class='block-label'"
itemLabel="barrier"/>
我也试过添加
itemValue="id"
但这不起作用
这包含在from元素
中<form:form method="post" accept-charset="UTF-8" action="${action}"
onsubmit="return checkAndSend()" id="create"
novalidate="" modelAttribute="testDto">
所以我遇到的问题如下:
Barrier.java
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((barrier == null) ? 0 : barrier.hashCode());
result = prime * result + ((display == null) ? 0 : display.hashCode());
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Barrier other = (Barrier) obj;
if (barrier == null) {
if (other.barrier != null)
return false;
} else if (!barrier.equals(other.barrier))
return false;
if (display == null) {
if (other.display != null)
return false;
} else if (!display.equals(other.display))
return false;
if (id != other.id)
return false;
return true;
}
赞赏任何指示和建议
由于
更新:
感谢指点。我跟着以下。你的建议有所帮助。
我在控制器中创建了folloiwng
@InitBinder
public void initBinder(WebDataBinder binder)
{
binder.registerCustomEditor(Barrier.class, new BarrierPropertyEditor(barrierService));
}
然后添加了一个类进行转换
public class BarrierPropertyEditor extends PropertyEditorSupport {
private BarrierService barrierService;
public BarrierPropertyEditor(BarrierService barrierService) {
this.barrierService = barrierService;
}
@Override
public void setAsText(String text) {
Barrier b = barrierService.findById(Integer.valueOf(text));
setValue(b);
}
}
这会在我的DTO上设置屏障对象。
(对不起盖帽)它没有解释为什么在最初的负载下检查复选框。
如何在初始加载时取消选中复选框?
答案 0 :(得分:0)
您可以在Controller中使用@ModelAttribute来提供复选框中的值列表。
@ModelAttribute("barrierList")
public List<Barrier> populateBarrierList() {
List<Barrier> barrierList = dataService.getBarriers();
for(Barrier barrier: barrierList )
{
barrierList.add(barrier);
}
return barrierList ;
}
在JSP中,使用以下命令:
<form:checkboxes path="barriers" items="${barrierList}" element="label class='block-label'" itemLabel="barrier"/>