一尘不染

将对象从下拉列表(.jsp)传递到控制器

jsp

我试图将一个对象(或只是ID)传递给我的控制器,该控制器是我从下拉列表中选择的。有2个类: productcategory
product 包含一个外键,这是 category 的ID )这是我将其加载到以下方式:

@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());
}

阅读 226

收藏
2020-06-10

共1个答案

一尘不染

将一个ID添加到您的选择中-该ID作为请求参数添加。

<select name="category" id="categoryId">

并获得价值的控制器

public String save(@RequestParam("categoryId") Long categoryId, Model model)

如果您的产品产品具有categoryId字段(带有setter),则可以仅使用产品产品,而不能使用长的categoryId

2020-06-10