Genera una lista de casillas de verificación a partir del mapa. Ahora cómo establecer el valor de la clave (falso/verdadero) y ahora puedo descargarlo en UserConfig para poder usar este valor en el resto del proyecto.
Mi vista:
<body> <main> <form th:action="@{/file/uploadFile}" enctype="multipart/form-data" method="POST"/> <fieldset> <legend>Generate Report</legend> <label> Upload File <input name="file" type="file" required/> <input type="submit" value="Upload"/> </label> <label th:each="item : ${userConfig.isEnableMap}"> <input type="checkbox" id="" th:text="${item.key}" th:value="${item.value}"/> </label> </form> </fieldset> </main> </body>
Mi clase UserConfig:
@Component public class UserConfig { private Map<String, Boolean> isEnableMap = new HashMap<>(); public UserConfig() { isEnableMap.put(EnableProcess.MONTHLY_TIME_UPDATE.getName(), false); isEnableMap.put(EnableProcess.SUM.getName(), false); isEnableMap.put(EnableProcess.HIDE_COLUMNS.getName(), true); } public UserConfig(Map<String, Boolean> isEnableMap) { this.isEnableMap = isEnableMap; } public Map<String, Boolean> getIsEnableMap() { return isEnableMap; } public void setIsEnableMap(Map<String, Boolean> isEnableMap) { this.isEnableMap = isEnableMap; } public enum EnableProcess { MONTHLY_TIME_UPDATE("Monthly time update"), SUM("Sum"), HIDE_COLUMNS("Hide columns"); private final String name; EnableProcess(String name) { this.name = name; } public String getName() { return name; } }
Controlador
@PostMapping(value = "/uploadFile", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity<Resource> uploadFile(@RequestParam("file") MultipartFile file, @ModelAttribute("userConfig") UserConfig userConfig) { String fileName = file.getOriginalFilename(); if (getExtension(fileName).equals("XLSX") || getExtension(fileName).equals("XLS")) { XSSFWorkbook workbook = reportService.processFile(file); reportService.writeWorkbook(workbook); } Resource resource = new ClassPathResource("temp/" + reportConst.getTempFileName()); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + reportConst.getTempFileName() + "\""); return new ResponseEntity<>(resource, headers, HttpStatus.OK); }
No uso la base de datos. Solo necesita que se guarden los valores con el fin de generar el informe.
Con preprocesamiento (si te entendí bien), podríamos intentar algo como:
<input th:field="*{userConfig.isEnableMap['__${item.key}__']}" ... />
... suponiendo que el resto funcione. ;)