Spring MVC ModelAttribute Felder Null Sind Statt der Form, Input Werte
Ich versuche, mich ein Formular, auf dem Postweg eine CardRequestResource:
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
}
In mein controller, ich laden Sie zunächst die JSP und fügen Sie ein leeres CardRequestResource der ModelMap:
@RequestMapping(value = { "", "/approval" }, method = RequestMethod.GET)
public String getApproval(ModelMap map) {
map.put("cardRequestResource", new CardRequestResource());
return "cardoffice/approval";
}
Meine JSP baut das Formular mit den cardRequestResource Modell Attribut:
<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>
Einer Javascript-Funktion macht einen AJAX-Aufruf zum füllen der form Werte:
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);
}
In diesem Punkt kann der Benutzer einen update der Kommentar-text-Bereich, und der versteckte Eingang ändern kann, bedingt auf das, was der Benutzer in das Feld. Dann, wenn das Formular abgeschickt wird, nenne ich die folgende Javascript-Funktion:
function postCardRequest(url) {
var serialized = $("#detailForm").serialize();
alert(serialized);
$.ajax({
type: "POST",
url: url,
data: serialized,
contentType: "application/json",
dataType: "json"
});
}
Alert zeigt, dass die Felder gefüllt sind korrekt mit den Daten, die entweder ursprünglich geladen, AJAX/Javascript, oder durch den Benutzer. Jedoch wenn ich den handler in mein controller, dass die Prozesse der post, die CardRequestResource ist nicht null, sondern JEDES EINZELNE Feld ist NULL!
Handler-code:
@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;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich glaube, ich fand die perp!
Dieser lil' Kerl hier mitten in der POST-AJAX-call:
War ich ursprünglich senden von JSON zu meinem controller, dann erfuhr ich, dass Spring MVC hatte, dass der nette ModelAttribute Anmerkung, damit ich nicht haben, um sorgen über das konvertieren nach/von JSON während meiner POST. Leider, ich glaube nicht, dass zu entfernen, die contentType-line, und man würde denken, dass es einen Fehler auslösen, oder etwas mit ihm noch drin... anscheinend nicht. Nur NULL-Werte in der Bindung und Stunden der erfolglosen Debuggen...
Nachdem ich entfernt, die Linie begann ich, mich Daten in der CardRequest Attribute anstelle von Null-Werten!
Versuchen Sie, den folgenden code in die aplication-context.xml. Dies könnte die Lösung sein, wenn Sie mit Ihrer form
encType='multipart/form-data'
.