Here's the form
<form:form commandName="product" enctype="multipart/form-data" action="${pageContext.request.contextPath}/product/save">
<!-- Image Input -->
<div class="form-row">
<div class="col-xs-12 form-group">
<label class="control-label">Product Image</label>
<div class="input-group image-preview">
<input type="text" class="form-control image-preview-filename" disabled="disabled">
<span class="input-group-btn">
<!-- image-preview-clear button -->
<button type="button" class="btn btn-default image-preview-clear" style="display:none;">
<span class="glyphicon glyphicon-remove"></span> Clear
</button>
<!-- image-preview-input -->
<div class="btn btn-default image-preview-input">
<span class="glyphicon glyphicon-folder-open"></span>
<span class="image-preview-input-title">Browse</span>
<form:input type="file" accept="image/png, image/jpeg, image/gif" path="productImage"/>
</div>
</span>
</div>
</div>
</div>
<!-- Product Number -->
<div class="form-row">
<div class="col-xs-12 form-group">
<label class="control-label">Product Number</label>
<form:input path="code" type="text" class="form-control" />
</div>
</div>
<!-- Product Name-->
<div class="form-row">
<div class="col-xs-12 form-group">
<label class="control-label">Product Name</label>
<form:input path="name" type="text" class="form-control"/>
</div>
</div>
<!-- Product Description -->
<div class="form-row">
<div class="col-xs-12 form-group">
<label class="control-label">Product Description</label>
<form:textarea path="description" class="form-control" />
</div>
</div>
<!-- Price, Cost and Quantity -->
<div class="form-row">
<div class="col-xs-4 form-group required">
<label class="control-label">Suggested Retail Price</label>
<form:input path="srp" class="form-control" size="4" type="text"/>
</div>
<div class="col-xs-4 form-group required">
<label class="control-label">Item Cost</label>
<form:input path="cost" class="form-control" type="text"/>
</div>
<div class="col-xs-4 form-group required">
<label class="control-label">Dealers Price</label>
<form:input path="dp" class="form-control" type="text"/>
</div>
</div>
<!-- Button -->
<div class="form-row">
<div class="col-md-12 form-group">
<button class="form-control btn btn-primary submit-button" type="submit">Add »</button>
</div>
</div>
</form:form>
The Form Backing Object
public class ProductForm {
private MultipartFile productImage;
private ProductDTO productDTO;
..Setters and getters
}
The controller
@RequestMapping(value="/save",method = RequestMethod.POST,consumes="multipart/form-data")
public ModelAndView saveProductForm(@ModelAttribute("product") ProductForm productForm,BindingResult result){
productService.saveProduct(productForm.getProductDTO());
return MavBuilder.render(ADD_PRODUCT_VIEW).toMav();
}
Upon saving, The form backing object eceives null value for the product image and form values that are input, however if I remove the enctype, and select an image for uploading. it's only the form values that are retrieve by the form backing object. what am I missing here?