2013-08-01 32 views
8

Tôi đang cố gắng để thực hiện một hình thức mà sẽ gửi một CardRequestResource:Spring MVC ModelAttribute Fields là Null Thay vì Input Form Values ​​

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 
} 

Trong điều khiển của tôi, đầu tiên tôi nạp JSP và thêm một CardRequestResource trống để các ModelMap:

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

My JSP được xây dựng theo hình thức với mô hình cardRequestResource thuộc tính:

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

Một chức năng Javascript thực hiện cuộc gọi AJAX để điền giá trị hình thức:

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

Tại thời điểm này người dùng có thể cập nhật các vùng văn bản bình luận, và đầu vào ẩn có thể thay đổi điều kiện về những gì người dùng nhập vào lĩnh vực này. Sau đó, khi biểu mẫu được gửi, tôi gọi hàm javascript sau:

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

Cảnh báo cho thấy các lĩnh vực được dân cư một cách chính xác với các dữ liệu đã được một trong hai ban đầu nạp bởi AJAX/Javascript, hoặc bởi người sử dụng. Tuy nhiên khi tôi nhận được để xử lý trong bộ điều khiển của tôi xử lý các bài viết, các CardRequestResource là không null, nhưng MỌI lĩnh vực SINGLE trong nó là NULL!

đang 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; 
} 

Trả lời

8

Vì vậy, tôi nghĩ rằng tôi thấy perp!

lil này' chàng ngay tại đây trong cuộc gọi POST AJAX:

contentType: "application/json", 

tôi ban đầu được gửi JSON để điều khiển tôi, sau đó tôi biết được rằng Spring MVC có mà tiện lợi ModelAttribute chú thích, vì vậy tôi sẽ không có phải lo lắng về việc chuyển đổi/từ JSON trong POST của tôi. Thật không may, tôi đã không nghĩ rằng để loại bỏ rằng dòng contentType, và người ta sẽ nghĩ rằng nó sẽ ném một lỗi hoặc một cái gì đó với nó vẫn còn ở đó ... dường như không. Chỉ cần giá trị NULL trong ràng buộc và giờ gỡ lỗi không kết quả ...

Sau khi tôi xóa dòng đó, tôi bắt đầu nhận dữ liệu trong thuộc tính CardRequest thay vì NULL!

+1

Điều này đã lưu ngày của tôi! Cảm ơn – jmcg

0

Hãy thử đặt mã sau vào tệp aplication-context.xml. Đây có thể là giải pháp nếu bạn đang có biểu mẫu encType='multipart/form-data'.

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
<property name="maxUploadSize" value="10000000"/> 
</bean> 
Các vấn đề liên quan