2013-08-01 17 views
8

Bir CardRequestResource yayınlayacağız bir form yapmaya çalışıyorum Değerleri Are ModelMap:Bahar MVC ModelAttribute Alanları Yerine Formu Girdi Boş

<form:form id="detailForm" name="detailForm" modelAttribute="cardRequestResource"> 
    <form:input path="statusId" type="hidden" id="statusId" name="statusId" /> 
    <form:textarea path="comments" name="comments" id="commentTextarea" rows="7" cols="81" style="font-style: normal;"/> 
</form:form> 
:

@RequestMapping(value = { "", "/approval" }, method = RequestMethod.GET) 
public String getApproval(ModelMap map) { 
    map.put("cardRequestResource", new CardRequestResource());  
    return "cardoffice/approval"; 
} 

Benim JSP cardRequestResource modeli özniteliği ile formunu oluşturur Bu noktada

function getCardRequestDetails(cardRequestUrl) { 
    $.ajax({ 
     type : "GET", 
     url : cardRequestUrl, 
     dataType : "json", 
     success : function(response) { 
      loadCardRequestDetails(response); 
     }, 
     error : function(response) {} 
    }); 
}; 

function loadCardRequestDetails(cardRequest) { 
    $("#statusId").attr("value", cardRequest.statusId); 
    $("#commentTextarea").val(cardRequest.comments); 
} 

kullanıcı yorumu metin alanını güncelleyebilir ve gizli giriş kullanıcı alanına girer ne şartlı değişebilir:

Bir JavaScript işlevi formu değerleri doldurmak için bir AJAX çağrı yapar.

function postCardRequest(url) { 
    var serialized = $("#detailForm").serialize(); 
    alert(serialized); 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: serialized, 
     contentType: "application/json", 
     dataType: "json"     
    }); 
} 

uyarı alanlar ya aslen AJAX/Javascript tarafından yüklenen veya kullanıcı tarafından yapıldı verilerle doğru doldurulan olduğunu göstermektedir: form gönderildiğinde Sonra ben şu JavaScript işlevini çağırın. Ancak, denetleyicimde postayı işleyen işleyiciye ulaştığımda, CardRequestResource boş değil, ama HER TEK SINGLE alanı NULL!

Handler kodu:

@RequestMapping(value = "/approval/submit", method = RequestMethod.POST) 
public @ResponseBody Map<String, Object> postCardRequest(@ModelAttribute(value = "cardRequestResource") CardRequestResource cardRequestResource) { 
    Map<String, Object> responseMap = new HashMap<String, Object>(); 
    final String success = "success"; 
    Boolean isSuccessful = Boolean.FALSE; 

    if(cardRequestResource != null){ 
     isSuccessful = Boolean.TRUE; 
    } 
    //TODO 

    System.out.println("Status: " + cardRequestResource.getStatusId() + ", Comments: " + cardRequestResource.getComments()); 

    responseMap.put(success, isSuccessful); 
    return responseMap; 
} 

cevap

8

yüzden ÇaIan buldum!

POST AJAX çağrısında adam Buradaki lil':

contentType: "application/json", 
Başlangıçta benim denetleyicisine JSON gönderiyordu

, o zaman ben Spring MVC o şık ModelAttribute ek açıklama olduğunu öğrendik, bu yüzden olmazdı POST sırasında JSON'a dönüştürmekten endişeleniyorum. Ne yazık ki, bu contentType satırını kaldırmayı düşünmedim ve kimse onunla hala bir hata ya da bir şey atacağını düşünürdü ... görünüşe göre değil. Sadece NULL değerleri ve hata ayıklama işleminin başarısız olduğu saatler ...

Bu satırı kaldırdıktan sonra, NULL'lar yerine CardRequest özniteliklerine veri almaya başladım! Aşağıdaki kodu aplication-context.xml içine koymaya çalışın.

+1

Bu, günümü kurtardı! Teşekkürler – jmcg

0

Formun encType='multipart/form-data' olması durumunda bu çözüm olabilir.

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
<property name="maxUploadSize" value="10000000"/> 
</bean>