[SPRING] Spring MVC에서 드롭 다운 상자를 채우는 방법
SPRINGSpring MVC에서 드롭 다운 상자를 채우는 방법
나는 Spring MVC에서 드롭 다운 박스를 채우는 방법을 알아 내려고 노력해왔다. 이 주제에 몇 가지 실이 있습니다. 그러나 내가 찾은 사람 중 누구도 나를 도왔습니다. 그래서 누군가가 나를 도울 수 있기를 바랍니다.
여기 내 컨트롤러가 있습니다 :
@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";
}
}
여기 JSP 페이지가 있습니다 :
<%@ 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>
문서 번호를 검색하는 @ModelAttribute 메서드를 추가하려고 시도했지만,
@ModelAttribute
public List<Document> documentNumberList(){
return documentService.retrieveAllDocumentNumbers();
}
그러나 그것은 나에게 오류를 줬다. 어떻게해야 하는지를 아는 사람이 있습니까?
시간 내 주셔서 감사합니다
/디
편집 나는 documentService에서 검색 한 문서 번호에 대한 드롭 다운 상자를 갖고 싶다는 것을 분명히했다.
편집 2 요청 된 오류 로그는 다음과 같습니다.
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)
솔루션 나는 그것으로부터 이익을 얻을 수있는 다른 사람들이있을 경우를 위해 작동하는 완전한 컨트롤러 코드를 추가 할 것이라고 생각했다.
@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";
}
}
해결법
-
==============================
1.documentNumberList를 사용하여 뷰를 표시하기 위해 어떤 Controller 메서드가 호출되는지는 모르지만이 뷰에 전달 된 모델에 해당 컬렉션을 추가해야합니다.
documentNumberList를 사용하여 뷰를 표시하기 위해 어떤 Controller 메서드가 호출되는지는 모르지만이 뷰에 전달 된 모델에 해당 컬렉션을 추가해야합니다.
model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers());
예외 스택 추적에서 documentService 필드의 @Autowired도 누락되었습니다.
-
==============================
2.
@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 클래스는 레이블 및 값 항목을 드롭 다운하는 데 사용하는 간단한 DTO입니다. label 및 value 속성과 해당 getter / setter가 있습니다.
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>
이것이 도움이되기를 바랍니다 ..
-
==============================
3.나는 오늘 혼자서 이런 종류의 문제를 해결했다. 이것은 매우 간단하고 이해하기 쉽습니다. 봄 MVC 3.0 컨트롤러에서 그냥이 코드를 배치 -
나는 오늘 혼자서 이런 종류의 문제를 해결했다. 이것은 매우 간단하고 이해하기 쉽습니다. 봄 MVC 3.0 컨트롤러에서 그냥이 코드를 배치 -
@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; }
이제 "creditCardTypes"속성은 페이지로드 또는 페이지 제출 범위에서 사용할 수 있으며 requestmapping url이 무엇이든 사용할 수 있음을 의미합니다.
jsp에서는이 코드를 - 신용 카드 유형에 넣습니다.
<form:select path="creditCardType"> <option value="Select" label="Select a card type"></option> <form:options items="${creditCardTypes}" /> </form:select>
here, path = "creditCardType"은 Spring MVC 모델 / 명령 객체의 속성을 의미하며, items = "$ {creditCardTypes}"는 "creditCardTypes"ModelAttribute에서 채워진 모든 신용 카드 유형을 사용할 수 있음을 의미합니다. 그게 전부 야 !!!
from https://stackoverflow.com/questions/10499641/how-to-populate-dropdown-box-in-spring-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Jackson과 HttpMessageConverter 및 joda DateTime 속성이 deserialize에 실패한 Spring RestTemplate (0) | 2019.02.05 |
---|---|
[SPRING] 유효성 검사기에 서비스 자동 연결 (0) | 2019.02.05 |
[SPRING] java.lang.Class는 java.lang.reflect.ParameterizedType에 캐스트 할 수 없습니다. (0) | 2019.02.05 |
[SPRING] Spring RestTemplate이 XmlConverter를 사용하도록 강제 실행 (0) | 2019.02.05 |
[SPRING] Spring 3 주석 - HibernateDaoSupport - 저장소가 세션 팩토리를 필요로 함 (0) | 2019.02.05 |