2013-08-01 20 views
8

私はCardRequestResourceを投稿するフォームを作成しようとしている値であり、 ModelMap:Spring MVCのModelAttributeフィールドが代わりにフォーム入力のヌルが

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

私のJSPはcardRequestResourceモデル属性を持つフォームを作成しますこの時点で

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

ユーザーがコメントテキストエリアを更新すること、および隠し入力はユーザーがフィールドに入ったものに、条件付きで変更することがあります。

A JavaScript関数はフォームの値を移入するAJAX呼び出しを行います。フォームが送信されるときに、私は、次の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ではありませんが、その中のすべての単一フィールドはNULLです!

ハンドラコード:

@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

だから私は、私はPERPを見つけたと思います!

このリル男はここPOST AJAX呼び出し中:

contentType: "application/json", 

私はもともと私のコントローラにJSONを送信した後、私はSpring MVCのは、その気の利いたModelAttribute注釈を持っていたことを学んだので、私は持っていません私のPOST中にJSONとの変換を心配する。残念ながら、私はcontentType行を削除するとは思っていませんでした。だから、そこにまだエラーや何かがスローされると思うでしょう...明らかにそうではありません。バインドのNULL値と無駄なデバッグ時間があります...

私はその行を削除した後、NULLの代わりにCardRequest属性でデータを取得し始めました!

+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> 
関連する問題