Как заполнить выпадающий список в Spring MVC
Я пытался выяснить, как заполнить раскрывающийся список в Spring MVC. Есть несколько тем на эту тему, но ни одна из них, которые я нашел, не помогла мне, поэтому я надеюсь, что кто-то здесь может мне помочь.
Вот мой контроллер:
<code>@Controller @RequestMapping("/document-revision") public class DocumentRevisionController { @Autowired private DocumentRevisionService documentRevisionService; private DocumentService documentService; @RequestMapping(value="/list", method=RequestMethod.GET) public String getDocumentRevisionList(Model model) { List<DocumentRevision> documentRevisions = documentRevisionService.retrieveAllDocumentRevisions(); model.addAttribute("documentRevisions", documentRevisions); return "document-revision"; } @RequestMapping(value="/add", method=RequestMethod.GET) public String getDocumentRevision(Model model) { DocumentRevision documentRevision = new DocumentRevision(); model.addAttribute("documentRevisionAttribute", documentRevision); return "new-documnent-revision"; } @RequestMapping(value="/add", method=RequestMethod.POST) public String postDocumentRevision(@ModelAttribute("documentRevisionAttribute") @Valid DocumentRevision documentRevision, BindingResult result) { if(result.hasErrors()){ return "new-document-revision"; } documentRevisionService.createDocumentRevision(documentRevision); return "redirect:/testapp/document-revision/list"; } } </code>
и вот страница JSP:
<code><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style> .error { color: red; } </style> </head> <body> <h1>Create New Document Revision</h1> <c:url var="saveUrl" value="/testapp/document-revision/add" /> <form:form modelAttribute="documentRevisionAttribute" method="POST" action="${saveUrl}"> <table> <tr> <td>DocumentNumber</td> <td><form:select path="document_number"> <form:option value="NONE" label="--- Select ---" /> <form:options items="${documentNumberList}" /> </form:select> </td> <td><form:errors path="document_number" cssClass="error" /></td> </tr> <tr> <td><form:label path="documentRState">Document R-State</form:label></td> <td><form:input path="documentRState"/></td> <td><form:errors path="documentRState" cssClass="error"/></td> </tr> </table> <input type="submit" value="Save" /> </form:form> </body> </html> </code>
Я попытался добавить метод @ModelAttribute, который получает номера документов,
<code> @ModelAttribute public List<Document> documentNumberList(){ return documentService.retrieveAllDocumentNumbers(); } </code>
но это дало мне ошибки. Есть кто-нибудь, кто знает, как это сделать?
Спасибо за ваше время
/ D
Edit Я подумал, что хотел бы уточнить, что я хочу иметь выпадающий список для номеров документов, которые извлекаются documentService.
Edit 2 Вот журнал ошибок по запросу:
<code>java.lang.NullPointerException testapp.controller.DocumentRevisionController.documentNumberList(DocumentRevisionController.java:33) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:601) org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) org.springframework.web.method.annotation.ModelFactory.invokeModelAttributeMethods(ModelFactory.java:123) org.springframework.web.method.annotation.ModelFactory.initModel(ModelFactory.java:97) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:614) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) </code>
Solution Я думал, что добавлю полный код контроллера, который работает, если есть другие, которые могут извлечь из этого пользу:
<code>@Controller @RequestMapping("/document-revision") public class DocumentRevisionController { @Autowired private DocumentRevisionService documentRevisionService; @Autowired private DocumentService documentService; @RequestMapping(value="/list", method=RequestMethod.GET) public String getDocumentRevisionList(Model model) { List<DocumentRevision> documentRevisions = documentRevisionService.retrieveAllDocumentRevisions(); model.addAttribute("documentRevisions", documentRevisions); return "document-revision"; } @RequestMapping(value="/add", method=RequestMethod.GET) public String getDocumentRevision(Model model) { DocumentRevision documentRevision = new DocumentRevision(); model.addAttribute("documentRevisionAttribute", documentRevision); model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers()); return "new-documnent-revision"; } @RequestMapping(value="/add", method=RequestMethod.POST) public String postDocumentRevision(@ModelAttribute("documentRevisionAttribute") @Valid DocumentRevision documentRevision, BindingResult result) { if(result.hasErrors()){ return "new-document-revision"; } documentRevisionService.createDocumentRevision(documentRevision); return "redirect:/testapp/document-revision/list"; } } </code>