2016-10-03 124 views
0

我有一個jsp頁面,其中包含用於將ne項添加到系統的表單。在那裏,我需要選擇新項目所屬的類別。我需要使用spring從數據庫填充這個下拉列表。對於表單提交,我寫了一個名爲ItemController.java的控制器類,其中下拉元素是我需要填充的。但是,該填充列表項需要從另一個名爲CategoryController.java的控制器類中調用。我嘗試了很多方法,但仍然無法做到這一點,因爲仍然犯了錯誤。有人可以看看這個請嗎?在彈簧中從數據庫填充下拉列表

這是我的代碼。

addItem.jsp

<form:form class="form-horizontal" role="form" id="frmAddItem" action="/admin/items/add_item" method="post" commandName="command"> 
    <fieldset class="scheduler-border"> 

    <div class="form-group"> 
    <div class="row"> 
    <label for="selectCat" class="col-xs-3 control-label"> 
     Category 
    </label> 

    <div class="col-xs-5"> 

    <form:select class="form-control" id="selectCat" path="categoryName"> 
    <form:option value="-" label="--Select Category--"/> 
    <form:options items="${listCat}" /> 
    </form:select> 
     <span id="catErr" class="input-group-error"></span> 
    </div>........ 

ItemController.java

@Controller 
@RequestMapping(value = "/items") 
public class ItemController { 

    private static final Logger LOG = LogManager.getLogger(ItemController.class); 

    @Autowired 
    private ItemRepository item; 

    @Qualifier("categoryRepository") 
    @Autowired 
    private CategoryRepository category; 

    /** 
    * Add new item view 
    */ 

    //For viewing the add item form 
    @RequestMapping(value = "/add", method = RequestMethod.GET) 
    public ModelAndView showAddItem() { 
     return new ModelAndView("addItem", "command", new Item()); 
    } 

    //For submitting the add new item 
    @RequestMapping(value = "/add_item") 
    public String addItem(@ModelAttribute("newItem") Item newItem) throws SQLIntegrityConstraintViolationException { 

    System.out.println("First Name:" + newItem.getItemName()); 

    int a = item.add(newItem); 
    if (a == 1) 
     return "redirect:add"; 
     // model.setViewName("addItem"); 
    else 

    // System.out.println("Error in item add"); 
    return "redirect:add"; 
    // return model; 
    } 

CategoryController.java

@Controller 
@RequestMapping("/items") 
public class CategoryController { 

    private static final Logger LOG = LogManager.getLogger(CategoryController.class); 

    @Autowired 
    private CategoryRepository categoryRepository; 

    @Autowired 
    private ItemRepository item; 


    @RequestMapping(value = "/add", method = RequestMethod.GET) 
    public ModelAndView showAddItem() { 
     ModelAndView model = new ModelAndView(); 
     List<Map<String, Object>> listCat = categoryRepository.viewCategoryList(); 
     model.addObject("listCat", listCat); 
     return new ModelAndView("addItem", "command", new Item()); 
    } 
+0

它看起來你有映射/項目/添加映射到兩個不同的控制器 – jmw5598

+0

https://www.mkyong.com/spring-mvc/spring-mvc-dropdown-box-example /你的問題是你有地圖列表。在這個例子中只有鍵值對的映射。我認爲你必須循環list.Within循環,你可以嘗試類型的代碼或帶鍵和值的選項標籤 – Sanka

回答

1

您要2個模型添加到ModelAndView對象在showAddItem方法內CategoryController班,哪會如果要將多個對象添加到ModelAndView,則可以使用Map或僅使用Model類。

@RequestMapping(value = "/add", method = RequestMethod.GET) 
public String showAddItem(Model model) { 
    List<Map<String, Object>> listCat = categoryRepository.viewCategoryList(); 
    model.addAttribute("listCat",listCat); 
    model.addAttribute("command",new Item()); 
    return "addItem"; 
} 

,因爲你正試圖填充從List of Maps下拉你可能想改變JSP中的當前代碼。

<select name='lists'> 
    <c:forEach var="list" items="${listCat}"> 
     <option id="${list.key}" value="${list.value.getName()}">${list.value.getName()}</option> 
    </c:forEach> 
</select> 

變化形式裏面的命令名屬性太

commandName="command" 
+0

showAddItem (ModelAndView modelandview)'正在返回'返回新的ModelAndView(「addItem」,「model」,model);'。當我將'String'改爲'ModelAndView'時,它會給出這個錯誤。 'java.lang.IllegalStateException:既沒有BindingResult也沒有bean名稱的普通目標對象'command'作爲請求屬性可用。 – SMash

+0

你可以看看這個嗎?我嘗試了很多方法,但仍然在爲此付出努力.. – SMash

+0

對已刪除的代碼進行了一些更改,modelAndView只是用Model來代替。 – Priyamal