2017-04-18 128 views
0

我試圖將一個對象(或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()); 
} 

回答

1

添加ID到您的選擇 - 該id被添加爲一個請求參數。

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

而且控制器來獲取值

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

如果您的產品的產品具有CategoryID字段(與二傳手),你可以只使用產品的產品,而不是長期的categoryId

+0

我仍然得到錯誤「客戶發送的請求在語法上不正確。」 。我嘗試過這樣的:''''''''''''''''''''''''''''''我試過這樣的:'public String save(Product Product,@RequestParam(value =「categoryId」)Long categoryId,Model model){' ',然後'product.setCategory(categoryDao.findById(categoryId) – Rudi

+0

我已將名稱更改爲'name =「categoryId」',現在它正在工作 – Rudi

1

嘗試這樣:

@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表單標籤,提供更多的設備來處理這些那種情景

相關問題