【问题标题】:Pass object from Dropdown list (.jsp) to Controller将对象从下拉列表 (.jsp) 传递到控制器
【发布时间】:2017-04-18 12:01:29
【问题描述】:

我正在尝试将一个对象(或只是 ID)传递给我的控制器,该控制器是从下拉列表中选择的。有2个类:productcategoryproduct包含一个外键,即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;
}

如您所见,我将对象 category 传递到我的 .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());
}

【问题讨论】:

    标签: java spring jsp spring-mvc model-view-controller


    【解决方案1】:

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

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

    和控制器获取值

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

    如果您的 Product 产品有 categoryId 字段(带有 setter),您可以只使用 Product product 而不是 Long categoryId

    【讨论】:

    • 我仍然收到错误“客户端发送的请求在语法上不正确。” .我试过这样:public String save(Product product, @RequestParam(value="categoryId") Long categoryId, Model model) { 然后product.setCategory(categoryDao.findById(categoryId));
    • 我已将名称更改为name="categoryId",现在可以使用了
    【解决方案2】:

    试试这样的:

    @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 
    }
    

    即使为了更清晰和简化,尝试使用弹簧形式标签,它提供了更多的设施来处理这种情况

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多