我的表单包含多个项目:
<form>
<input name="items[0].title">
<input name="items[1].title">
<input name="items[2].title">
</form>
和班级:
class Form
{
private List<Item> items;
public List<Item> getItems()
{
return items;
}
public void setItems(List<Item> items)
{
this.items = items;
}
}
class Item
{
private String title;
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title= title;
}
public String print()
{
System.out.println("title: " + title);
}
}
它工作正常。我可以这样使用它:
@RequestMapping(value="/add", method=RequestMethod.POST)
public ModelAndView addSubmit(Form form)
{
form.getItems().get(1).print();
...
}
我想要做的是添加新类型的项目。例如,具有额外字段大小的BigItem:
class BigItem
{
private String title;
private String size;
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title= title;
}
public String getSize()
{
return size;
}
public void setSize(String size)
{
this.size= size;
}
public String print()
{
System.out.println("title: " + title);
System.out.println("size: " + size);
}
}
这只是一个原型和简化的代码。我希望将来有新的非常复杂的项目类型,需要为此做好准备。我的想法是使用公共字段和方法创建类Item,并在需要新项类型(例如BigItem)时随时扩展它。但我不知道如何映射它。我们假设我的表单如下:
<form>
<input name="items[0].title">
<input name="items[1].title">
<input name="items[1].size">
<input name="items[2].title">
</form>
和类BigItem扩展Item:
class BigItem extends Item
{
private String size;
public String getSize()
{
return size;
}
public void setSize(String size)
{
this.size= size;
}
public String print()
{
System.out.println("title: " + title);
System.out.println("size: " + size);
}
}
如何在控制器方法中映射它?我想从BigItem类调用方法print()而不是Item。
form.getItems().get(1).print();
答案 0 :(得分:0)
当您的表单返回Spring时,Spring将不知道您的item[1]
是Item
还是BigItem
。所以它不会起作用。你最好的选择是使用另一个类,比如FormItem
,使用Item
,BigItem
,BiggerItem
等所有属性的超级集合。然后使用你的控制器将FormItem
转换为适当的Item
以容纳输入字段或处理它们。但是,在设计Item
时必须小心谨慎,以便通过输入属性的存在来识别明确的Item
。