Spring MVCを使用して簡単なファイルアップロード機能を構築したいと考えています。それは基本的に取り組んでいることを私に語っSpringのファイルアップロードがモデル属性オブジェクトにバインドされていません
DEBUG:[org.springframework.web.multipart.commons.CommonsMultipartResolver]: Found multipart file [imageUpload] of size 29081 bytes with original filename [xyz.jpg], stored at [/home/myuser/workspace/myProject/target/tmp/upload_67f1107c_1b8f_402c_bebd_6cd8a6e4c830_00000032.tmp]
:これは、ログに記録されたファイルをアップロードする際に
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10240000"/>
</bean>
:
は私が場所にと作業multipartResolverを持っています。
これは私のJSPの一部です:
public class PlaceEditForm
{
@Valid
private Place place = new Place();
private Map<Integer, PlaceFeature> features;
private MultipartFile imageUpload;
... getter/setter omitted...
}
そして、これは私のコントローラメソッドの一部です:
<form:form modelAttribute="placeForm" action="/platz/save" method="post" cssClass="placeForm" enctype="multipart/form-data">
...
<label for="imageUpload">Upload</label>
<form:input type="file" path="imageUpload" id="imageUpload" accept="image/*" />
...
</form:form>
これは私のモデル属性オブジェクトのクラスである
@RequestMapping(value="/save", method=RequestMethod.POST)
public String savePlace (@Valid @ModelAttribute("placeForm") PlaceEditForm form, BindingResult result)
{
logger.debug("saveNewPlace");
logger.debug("Upload: "+form.getImageUpload()); // null
...
return "redirect:/platz/"+place.getPlaceId();
}
何フォームオブジェクトのimageUpload属性に値が設定されていない(null)のに対し、他のすべてのフォームプロパティそうです。
私は、コントローラでこれを使用するとき、それは仕事をしていることが見つかりました:@RequestParam
作品としてMultipartFileを有するので
@RequestMapping(value="/save", method=RequestMethod.POST)
public String savePlace (@Valid @ModelAttribute("placeForm") PlaceEditForm form, BindingResult result, @RequestParam("imageUpload") MultipartFile upload, BindingResult uploadResult)
{
logger.debug("saveNewPlace");
logger.debug("Upload: "+upload); // Works!!
...
return "redirect:/platz/"+place.getPlaceId();
}
が、フォームのmodelAttribute
オブジェクトに結合することはありません。ウェブ上で同じことをする数百もの例が見つかりましたが、違いは見つかりません。
私はまだ春を学んでいるので、非常に明白な点を見逃すかもしれません。コントローラーの2番目のバージョンを使用することはできますが、私はそれを理解できません。私が言ったように、私は学習しています。
<form:form modelAttribute="xyz">...</form:form>
内の<form:input path="abc">
プロパティのすべてがxyz.abc
にバインドされていてはなりませんか?これは、ファイルアップロード以外のすべてのプロパティでこのように機能します。
洞察? おかげ