Я работаю над приложением Spring MVC, и у меня есть следующие сомнения относительно того, что является более умным способом обработки логического параметра в POST-запросах, отправленных по форме.Каков самый умный способ обработать параметр «boolean», переданный приложением формы в метод контроллера Spring MVC?
Поэтому у меня есть следующий простой 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>
Так что, как юй может себе она содержит поле ввода имени 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() метод, который обрабатывать POST запрос к URI: http://localhost:8080/AccomodationMedia/
Чтобы получить логическое значение относящийся к isMaster параметр Я сделал:
в корпусе метода (поэтому я извлекаю его из HttpServletRequest запрос параметр).
Я также tryied изменить сигнатуру метода таким образом:
public String handleFileUpload(HttpServletRequest request,
@RequestParam MultipartFile[] fileUpload,
@RequestParam String isMaster) throws Exception {
Он работает только если HTML форма флажок установлен, в противном случае параметр isMaster является недействительным и идти в исключения.
Поэтому у меня есть следующие сомнения:
1) существует способ указать (в HTML), что если флажок не проверить значение должно быть ложным (избегая использовать JavaScript).
2) Или я могу обработать эту ситуацию в сигнатуре метода контроллера?
3) Могу ли я передать логическое значение вместо строки в HTML-форму?
Возможный дубликат [Значения флажка не привязываются к объекту при false?] (Http://stackoverflow.com/questions/8723765/checkbox-values-do-not-bind-into-object-when-false) – perbellinio