使用Sprint Boot和Thymeleaf将复选框映射到列表

我有一个使用

应用程序。我在页面上有一个表格,允许用户上传文件。我想添加一些复选框,也将返回到我的控制器。 *

我还没有找到一个很好的示例,说明如何以这种方式进行复选框。我认为我必须在模型中定义一个列表,并让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值。

我也@RequestParam List<String> searchValueshandleFileUpload()方法添加了参数。

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";

}

}


我固定<label th:text="#{${search}}"></label><label

th:text="${search}"></label>

我也固定<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>

以上是 使用Sprint Boot和Thymeleaf将复选框映射到列表 的全部内容, 来源链接: utcz.com/qa/407684.html

回到顶部