是否可以使用select标签将对象(car)传递给控制器?当我尝试使用以下代码时,无法识别car参数,结果是:
400-Bad Request
A car
由2个字符串组成(品牌,型号)
spot
包含1个汽车和2个字符串(town,streetName)
我的jsp页面:
<form:form method="post" modelAttribute="spot" action="${post_url}">
<form:select path="car">
<form:option value="-" label="--Select car"/>
<form:options items="${cars}"/>
</form:select>
<form:input type="text" path="town"/>
<form:input type="text" path="streetName"/>
<button>Save</button>
</form:form>
我的控制器:
@RequestMapping(value="/addSpot", method = RequestMethod.POST)
public String save(@ModelAttribute("spot") Spot spot){
service.addSpotToService(spot);
return "redirect:/spots.htm";
}
答案 0 :(得分:1)
你可以创建一个组件来将Car的Long id转换为object car
@Component
public class CarEditor extends PropertyEditorSupport {
private @Autowired CarService carService;
// Converts a Long to a Car
@Override
public void setAsText(Long id) {
Car c = this.carService.findById(id);
this.setValue(c);
}
}
在你的控制器中添加
private @Autowired CarEditor carEditor;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Car.class, this.carEditor);
}
然后在选择
中传递汽车的ID <form:select path="car">
<form:option value="-" label="--Select car"/>
<form:options items="${cars}" itemValue="id" itemLabel="model"/>
</form:select>
查看spring文档http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/view.html,特别是选项标记
部分items属性通常使用集合或数组填充 项目对象。 itemValue和itemLabel只是引用bean 这些项目对象的属性,如果指定的话;否则,该项目 对象本身将被字符串化。或者,您可以指定 项目的映射,在这种情况下,映射键被解释为选项 值和地图值对应于选项标签。如果是itemValue 和/或itemLabel碰巧也被指定为项目值 属性将应用于map键和item label属性 适用于地图值。
请告诉我这是否适合您