我有一个使用 Thymeleaf* 的 Spring Boot 1.3.0 应用程序。我在页面上有一个表格,允许用户上传文件。我想添加一些复选框,也将返回到我的控制器。 *
我还没有找到一个很好的示例,说明如何以这种方式进行复选框。我认为我必须在模型中定义一个列表,并让Thymeleaf显示所有复选框,但是我无法使其工作。
这是我的控制器:
@Controller public class CustomerDataController { private static final String SEARCH_TYPES = "searchTypes"; @RequestMapping(value = "/upload", method = RequestMethod.GET) public String displayUpload(Model model) { initModel( model ); return "upload"; } private void initModel(Model model) { model.addAttribute( UPLOAD, null ); // the values to display as check box title & values model.addAttribute(SEARCH_TYPES, Arrays.asList("Search A", "Search B")); // list to store what the user checks on the UI model.addAttribute("searchValue", new ArrayList<>()); model.addAttribute( customerResults ); } @Transactional @RequestMapping(value = "/userFile", method = RequestMethod.POST) public String handleFileUpload(@RequestParam("myFile") MultipartFile file, Model model, Authentication authentication) { // looking to get searchValue list, but not sure this is right } }
这是我html的重要部分:
<form onsubmit="return validate(this)" action="userFile" th:action="@{/userFile}" method="post" enctype="multipart/form-data"> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <ul> <li th:each="search : ${searchTypes}"> <input type="checkbox" th:field="*{searchValue}" th:value="${search}"/> <label th:text="#{${search}}"></label> </li> </ul> <p><input type="file" name="myFile" id="myFile"/></p> <p><input type="submit" class="btn btn-success" value="Submit Customer Data"/></p> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> </form>
复选框列表会正确构建,但是当我选择其中任何一个时,控制器模型中都不会显示任何值。
有人可以向我指出正确的方向,以将所选复选框的列表返回给我的控制器吗?
我已经修复了您的代码。
控制者
我使用initValues()方法来填充model值。
initValues()
model
我也@RequestParam List<String> searchValues向handleFileUpload()方法添加了参数。
@RequestParam List<String> searchValues
handleFileUpload()
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import java.util.Arrays; import java.util.List; @Controller public class CustomerDataController { private static final String SEARCH_TYPES = "searchTypes"; @ModelAttribute public void initValues(Model model) { model.addAttribute(SEARCH_TYPES, Arrays.asList("Search A", "Search B")); } @RequestMapping(value = "/upload", method = RequestMethod.GET) public String displayUpload() { return "upload"; } @RequestMapping(value = "/userFile", method = RequestMethod.POST) public String handleFileUpload(@RequestParam("myFile") MultipartFile file, @RequestParam List<String> searchValues) { // here you can use searchValues and file return "result"; } }
upload.html
我固定<label th:text="#{${search}}"></label>到<label th:text="${search}"></label>。
<label th:text="#{${search}}"></label>
<label th:text="${search}"></label>
我也固定<form>和<input type="checkbox">标签。
<form>
<input type="checkbox">
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"/> <title>Upload</title> </head> <body> <form th:action="@{/userFile}" method="post" enctype="multipart/form-data"> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <ul> <li th:each="search : ${searchTypes}"> <input type="checkbox" name="searchValues" th:value="${search}"/> <label th:text="${search}"></label> </li> </ul> <p><input type="file" name="myFile" id="myFile"/></p> <p><input type="submit" class="btn btn-success" value="Submit Customer Data"/></p> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> </form> </body> </html>