将下拉列表(.jsp)中的对象传递给控制器
问题描述:
我试图将一个对象(或ID)传递给我的控制器,我从下拉列表中选择该控制器。有2类:产品和类(产品包含外键,这是类的ID)这是我如何将其加载到:将下拉列表(.jsp)中的对象传递给控制器
@RequestMapping(value="/edit", method=RequestMethod.GET)
public ModelAndView edit(@RequestParam(required=false) Long id) {
ModelAndView mv = new ModelAndView();
if (id == null) {
mv.addObject(new Product());
} else {
mv.addObject("product", productDao.findById(id));
}
mv.addObject("category", categoryDao.findAll());
mv.setViewName("edit-product");
return mv;
}
正如你所看到的,我将对象类别传递到我的.jsp中。我在那里显示用户可以选择的所有类别。
<select name="category">
<c:forEach items="${category}" var="category">
<option name="category" value="${category.id}">${category.name}</option>
</c:forEach>
</select>
该值应该传递给我的控制器,但我不知道如何传递它。
@RequestMapping(value="/save", method=RequestMethod.POST)
public String save(Product product, Category category, Model model) {
product.setCategory(category); //not working, since the parameter isn't correct
Product result = productDao.save(product);
// set id from create
if (product.getId() == null) {
product.setId(result.getId());
}
答
添加ID到您的选择 - 该id被添加为一个请求参数。
<select name="category" id="categoryId">
而且控制器来获取值
public String save(@RequestParam("categoryId") Long categoryId, Model model)
如果您的产品的产品具有CategoryID字段(与二传手),你可以只使用产品的产品,而不是长期的categoryId
答
尝试这样:
@RequestMapping(value="/save", method=RequestMethod.POST)
public String save(@ModelAttribute Product product,@ModelAttribute Category
category, Model model) {
// Your code here,
//at this point you have full access to Product and Category object
//One more thing your input tag's name attribute must have same name as of
//your POJO's fields name
}
即使是更好的清晰度和简化尝试使用Spring表单标签,提供更多的设备来处理这些那种情景
我仍然得到错误“客户发送的请求在语法上不正确。” 。我尝试过这样的:''''''''''''''''''''''''''''''我试过这样的:'public String save(Product Product,@RequestParam(value =“categoryId”)Long categoryId,Model model){' ',然后'product.setCategory(categoryDao.findById(categoryId) – Rudi
我已将名称更改为'name =“categoryId”',现在它正在工作 – Rudi