I have been trying to find out how to populate a dropdown box in Spring MVC. There are a few threads out there on this subject but none of them that I have found have helped
Not sure what Controller method is called to show your view with documentNumberList, but you need to add that collection to the model passed to this view:
model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers());
Though from your exception stack trace you also missed an @Autowired on documentService field.
I have solved this kind of problem today by myself. This is very simple and easy to understand. In Spring MVC 3.0 controller just place this code -
@ModelAttribute("creditCardTypes")
public Map<String,String> populateCreditCardTypes() {
Map<String,String> creditCardTypes = new LinkedHashMap<String,String>();
creditCardTypes.put("VS", "Visa");creditCardTypes.put("MC", "MasterCard");
creditCardTypes.put("AE", "American Express");
creditCardTypes.put("DS", "Discover");creditCardTypes.put("DC", "Diner's Club");
return creditCardTypes;
}
Now "creditCardTypes" attribute will be avaiable in the page loading or page submitting scope , means it will available whatever the requestmapping url would be.
In jsp , place this code inside the - Credit card types:
<form:select path="creditCardType">
<option value="Select" label="Select a card type"></option>
<form:options items="${creditCardTypes}" />
</form:select>
here , path="creditCardType" means the attribute in the Spring MVC model/command object, items="${creditCardTypes}" means all the populated credit card types will be available in "creditCardTypes" ModelAttribute. Thats it !!!
@ModelAttribute("numberList")
public List<Document> documentNumberList(){
List<LabelValue> selectItems = new ArrayList<LabelValue>();
List<Document> docList = documentService.retrieveAllDocumentNumbers();
for (Document doc : docList) {
selectItems.add(new LabelValue(doc.id,doc.value));
}
return selectItems;
}
FYI LabelValue class is a simple DTO that we use to carry the drop down label and value items. It will have a label and value attribute, and the corresponding getters/setters.
LabelValue.java
private String lable;
private String value;
//getters/setters
---- JSP -----
<tr>
<td>DocumentNumber</td>
<td><form:select id="docNo" path="document_number">
<form:option value="NONE" label="--- Select ---" />
<form:options items="${numberList}" itemValue="value" itemLabel="lable"/>
</form:select>
</td>
<td><form:errors path="document_number" cssClass="error" /></td>
</tr>
hope this helps..