2013-08-01 10 views
8

Я пытаюсь сделать форму, которая будет размещать CardRequestResource:Spring MVC ModelAttribute поле является Null Вместо форме ввода значения

public class CardRequestResource extends ResourceSupport{ 
    private Long cardRequestId; 
    private String deliveryMethod; 
    private String address; 
    private boolean isHomeDelivery; 
    private String requestDate; 
    private String expectedDate; 
    private String comments; 
    private Long statusId; 
    private PersonResource person; 

    //Getters and Setters 
} 

В моем контроллере, я сначала загрузить JSP и добавить пустой CardRequestResource в ModelMap:

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

Мои JSP строит форму с атрибутом cardRequestResource модели:

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

функции А Javascript делает вызов AJAX для заполнения значения формы:

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); 
} 

На данный момент пользователь может обновить текстовое поле комментария, и скрытый вход может измениться условно на то, что входит пользователь в поле. Затем, когда форма была отправлена, я вызываю следующую функцию Javascript:

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

Оповещение показывает, что поля заполняются корректно с данными, которые либо изначально нагруженной AJAX/JavaScript, или пользователем. Однако, когда я получаю обработчик в контроллере, который обрабатывает сообщение, CardRequestResource не равен null, но поле EVERY SINGLE в нем равно NULL!

код Handler:

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

ответ

8

Так что я думаю, что я нашел преступника!

Это лил»парня прямо здесь в вызове POST AJAX:

contentType: "application/json", 

Я был первоначально отправка JSON в мой контроллер, тогда я узнал, что Spring MVC был, что ловкое ModelAttribute аннотации, так что я бы не беспокоиться о конвертации в/из JSON во время моего POST. К сожалению, я не думал удалять эту строку contentType, и можно было бы подумать, что это вызовет ошибку или что-то еще с ней ... видимо, нет. Просто значения NULL в привязке и часы бесплодной отладки ...

После того, как я удалил эту строку, я начал получать данные в атрибутах CardRequest вместо NULL!

+1

Это спасло мой день! благодаря – jmcg

0

Попробуйте поместить следующий код в aplication-context.xml. Это может быть решением, если у вас есть ваша форма encType='multipart/form-data'.

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
<property name="maxUploadSize" value="10000000"/> 
</bean> 
Смежные вопросы