私はSpring MVCアプリケーションで作業していますが、にブール型パラメータを処理するよりスマートな方法について、次の疑問があります。がフォームの送信によって送信されました。フォームのサブミッションによってSpring MVCコントローラメソッドに渡される "boolean"パラメータを処理する最もスマートな方法は何ですか?
だから私は、フォームが含まれている次のような単純なHTMLページを持っている:
だから、<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring MVC - Hibernate File Upload to Database Demo</title>
</head>
<body>
<div align="center">
<h1>Spring MVC - Hibernate File Upload to Database Demo</h1>
<form method="post" action="http://localhost:8080/AccomodationMedia/" enctype="multipart/form-data">
<table border="0">
<tr>
<td>Pick file #1:</td>
<td><input type="file" name="fileUpload" size="50" /></td>
</tr>
<tr>
<td>Pick file #2:</td>
<td><input type="file" name="fileUpload" size="50" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Upload" /></td>
</tr>
<tr>
<input type="checkbox" name="isMaster" value="true">Is Master Image<br>
</tr>
</table>
</form>
</div>
</body>
</html>
、湯はそれ自体、それが確認された場合には、真のString値を送ることisMasterという名前入力フィールドが含まれていることができて(チェックされていない場合、このパラメータの値はnullになります)。
そして私はこのコントローラクラスがある:
@RestController
@RequestMapping("/AccomodationMedia")
public class AccomodationMediaController {
.....................................................................
.....................................................................
.....................................................................
@RequestMapping(value = "/", method = RequestMethod.POST)
public String handleFileUpload(HttpServletRequest request,
@RequestParam MultipartFile[] fileUpload) throws Exception {
//@RequestParam String isMaster) throws Exception {
System.out.println("handleFileUpload() START");
boolean isMaster;
String isMasterString = request.getParameter("isMaster");
if(isMasterString == null) {
isMaster = false;
}
else {
isMaster = true;
}
if (fileUpload != null && fileUpload.length > 0) {
for (MultipartFile currentFile : fileUpload){
System.out.println("Saving file: " + currentFile.getOriginalFilename());
accomodationMediaService.saveAccomodationMedia(currentFile, isMaster);
}
}
return "Success";
}
}
だからhandleFileUploadは(ある)URIに向かっPOST要求処理方法:ブール値を得るためにhttp://localhost:8080/AccomodationMedia/
をisMasterに関連するパラメータ:
String isMasterString = request.getParameter("isMaster");
(方法はHttpServletRequestリクエストパラメータから取得しています)。
私はまた、このようにメソッドのシグネチャを変更するtryiedています
public String handleFileUpload(HttpServletRequest request,
@RequestParam MultipartFile[] fileUpload,
@RequestParam String isMaster) throws Exception {
htmlフォームのチェックボックスがチェックされている場合にのみ動作しますが、そうでない場合はisMasterパラメータがnullであり、それは例外に入ります。
は、だから私は、次の疑問があります。
1)はHTMLで指定する方法を(存在し)チェックボックスは値をチェックされていない場合ということが偽()JavaScriptを使用して避けなければなりません。
2)または、この状況をコントローラメソッドのシグネチャに処理できますか?
3)HTMLフォームに文字列1の代わりにブール値を渡すことはできますか?
[チェックボックスの値は、falseのときオブジェクトにバインドされません]の重複している可能性があります(http://stackoverflow.com/questions/8723765/checkbox-values-do-not-bind-into-object-when-false) – perbellinio