2012-05-08 18 views
10

Spring 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によって取得された文書番号のドロップダウンボックスを持つことであることを明確にしようと思いましたお時間

/D

編集いただきありがとうございます。

:私は、私はそれから利益を得ることができる他の人がある場合に動作します、完全なコントローラのコードを追加するだろうと思った

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) 

ソリューション:

編集2ここでが要求されるようにエラーログです

@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"; 
} 

} 
+0

エラーログを貼り付けることはできますか? –

答えて

8

documentNumberListでビューを表示するためにどのコントローラメソッドが呼び出されているのかわかりませんが、そのコレクションをthに渡されたモデルに追加する必要がありますビューには、次のとおりです。

model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers()); 

あなたの例外スタックトレースからあなたもdocumentServiceフィールド上@Autowiredを逃したけど。

+0

ありがとうございました! – dlinx90

8
@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です。ラベルと値属性、および対応する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> 

はこれが役に立てば幸い..

+0

RequestHandlerメソッドのパラメータとしてモデルが常に必要なわけではないため、このソリューションがさらに好きです。これは+1です。 – Mukus

6

私は自分で今日この種の問題を解決しました。これは非常に簡単で理解しやすいです。 Spring 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> 

、パス= "creditCardTypeは" 春のMVCモデル/コマンドオブジェクト内の属性を意味し、 項目= "$ {creditCardTypes } "は、" creditCardTypes "ModelAttributeで入力されたすべてのクレジットカードタイプを使用できることを意味します。 それはそうです!

関連する問題