2012-05-08 16 views
10

Spring MVC'de bir açılır kutuyu nasıl dolduracağınızı bulmaya çalışıyorum. Bu konuda birkaç konu var ama bulduğum hiçbiri bana yardımcı olmadı, bu yüzden bana yardım edebilecek birisinin bana yardım edebileceğini umuyorum. İşte Bahar MVC'de açılır kutuyu doldurma

benim denetleyicisi geçerli:

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

} 

ve burada jsp sayfası: Ben belge numaralarını alan bir @ModelAttribute yöntemi ekleyerek denedim

<%@ 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 
    public List<Document> documentNumberList(){ 
     return documentService.retrieveAllDocumentNumbers(); 
    } 

ama bana hata verdi. Nasıl yapılması gerektiğini bilen var mı?

benim dileğim documentService tarafından alınır belge numaraları için bir açılır kutu var olduğunu açıklamak düşündük zaman

/D

Düzenleme için teşekkür ederiz.

: Ben ondan yararlanabilecek daha var durumunda çalışır tam kontrolör kodu ekleyin düşündüm

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) 

Çözüm:

Düzenleme 2 İşte istendiği gibi hata günlüğü olduğunu

@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

Hata günlüğünü yapıştırabilir misiniz? –

cevap

8

documentNumberList ile görünümünüzü göstermek için Controller yönteminin çağrıldığından emin değilsiniz, ancak bu koleksiyonu th'ye geçirilen modele eklemeniz gerekir. görünümdür:

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

ayrıca documentService sahada bir @Autowired cevapsız senin durum yığın izlemesi gelen rağmen.

+0

Teşekkürler, bu işe yarıyor! – 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 sınıfı, aşağı açılır etiketi ve değer öğelerini taşımak için kullandığımız basit bir DTO'dur. Bir etiket ve değer niteliğine ve karşılık gelen alıcılara/ayarlayıcılara sahip olacaktır.

LabelValue.java

private String lable; 
private String value; 

//getters/setters 

---- JSP ----- bu yardımcı olur

<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> 

umut .. başıma sorun bugün bu tür çözmüş

+0

Bu çözümü daha çok beğeniyorum çünkü RequestHandler yönteminizin bir parametresi olarak her zaman bir modele ihtiyacınız olmayabilir. Bunun için +1. – Mukus

6

. Bu çok basit ve anlaşılması kolay. Bahar MVC 3.0 denetleyicisi olarak sadece bu kodu yerleştirebilirsiniz -

Şimdi
@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" özelliği sayfa yükleme veya sayfa göndererek kapsam avaiable olacak, bu requestmapping url olurdu ne olursa olsun mevcut demektir.

jsp olarak, içeride bu kodu yerleştirebilirsiniz - Kredi kartı tipleri:

burada
<form:select path="creditCardType"> 
    <option value="Select" label="Select a card type"></option> 
    <form:options items="${creditCardTypes}" /> 
</form:select> 

, yol = "CREDITCARDTYPE" Bahar MVC modeli/komut nesnesi özelliğini demektir ürün = "$ {creditCardTypes } "tüm nüfuslu kredi kartı türlerinin" creditCardTypes "ModelAttribute'da kullanılacağı anlamına gelir. Thats it!