【发布时间】:2016-01-27 17:16:38
【问题描述】:
我正在尝试在列表对象上使用<checkboxes> 标记。但是,尽管阅读了 mykong 教程并在其他地方进行了搜索,但我无法弄清楚这是如何完成的。
所以这就是我想要做的: 我有一堂课像
class Person{
List<IceCreams> creams;
}
所以现在我想给我的用户一个表格,让他可以选择他喜欢的冰淇淋。
控制器:
@Controller
public class IceCreamController{
@RequestMapping(value="icecream", method=RequestMethod.GET)
public String showPage(Model model){
Person person = repository.getPerson(); //Returns a Person, "creams" is not empty
model.addAttribute("creams", person.getIceCreams();
}
@RequestMapping(value="icecream", method=RequestMethod.POST)
public String showPage( @ModelAttribute("teilnehmer") List<IceCreams> likedCreams, Model model){
//do something with selected iceCreams
}
现在我不明白如何在 JSP 中继续。我知道我必须使用 checkboxes 标签,但我不知道它在提交时返回什么或者我是否正确使用它。
<form:form>
<form:checkboxes path="creams" items="${creams}"/>
<input type="Submit" value="Submit">
</form:form>
那么问题来了:我在JSP中写了什么,什么会返回给控制器?
在评论后添加: 冰淇淋类:
public class IceCream{
private long id;
private String creamName;
//+getter/setter }
编辑:在一个有用的答案之后,我尝试了这个: 将它们添加到模型中:
model.addAttribute("person", person);
model.addAttribute("creams", person.getCreams());
在 JSP 中我做了
<form:checkboxes path="teilnehmer"
items="${creams}"
itemValue="id"
itemLabel="creamName"
/>
所以在 POST 方法中,我采用了 ModelAttribute Person。
添加到控制器:
@InitBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(IceCream.class, new IceCreamsPropertyEditor());
还有新的编辑器类:
public class ContactsPropertyEditor extends PropertyEditorSupport{
@Autowired
IceCreamRepository creamrep;
@Override
public void setAsText(String text) throws IllegalArgumentException {
Integer creamId = new Integer(text);
IceCream cream = creamrep.findOne(creamId);
super.setValue(con);
}
}
不幸的是,结果是错误 400。
【问题讨论】:
-
你能发布你的
IceCreams课程吗 -
你能发布更新的控制器吗?
-
请修正代码中的拼写错误,例如联系人 contactId 和 superSetvalue(con) 没有意义。
-
已更改,抱歉。新控制器实际上只是旧控制器,只是将 person 对象添加到模型中。
标签: spring jsp spring-mvc