【发布时间】:2015-04-01 17:29:54
【问题描述】:
我的表单包含多个项目:
<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 扩展项:
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 类而不是 Item 中调用 print() 方法。
form.getItems().get(1).print();
【问题讨论】: