tutorial formulario form example espaƱol spring checkbox bind thymeleaf

spring - formulario - thymeleaf radio button example



Spring MVC Thymeleaf binding Lista con casillas de verificaciĆ³n (1)

Intento crear una forma usando thymeleaf que contiene una serie de casillas de verificación. La fuente del objeto que estoy pasando a la plantilla thymeleaf contiene una cadena y una lista.

package com.controller; import java.util.List; public class Source { private String sourceName; private List<String> testList; public String getSourceName() { return sourceName; } public void setSourceName(String name) { this.sourceName = name; } public List<String> getTestList() { return testList; } public void setTestList(List<String> list) { this.testList = list; } }

Paso un objeto de tipo fuente en la plantilla usando este controlador MVC.

package com.controller; import java.io.IOException; import java.util.List; import java.util.Locale; import org.springframework.beans.factory.annotation.Autowired; 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.RestController; import org.springframework.web.servlet.View; import org.thymeleaf.spring4.view.ThymeleafViewResolver; import com.web_application.AllEnvironmentsFromFile; import com.web_application.AllTestsAndPaths; import com.web_application.RunDao; import com.web_application.TestAndPath; @RestController public class ManualTestController { @Autowired private ThymeleafViewResolver resolver; @Autowired RunDao rDao; @Autowired AllEnvironmentsFromFile environments; @RequestMapping(value="/manualTest", method=RequestMethod.GET) public View greetingForm(Model model) throws Exception { AllTestsAndPaths a = new AllTestsAndPaths(); List<TestAndPath> testList = a.testsAndPaths(); String[] environmentList = new String[environments.getEnvironments().size()]; for(int i = 0; i < environments.getEnvironments().size(); i++) { environmentList[i] = environments.getEnvironments().get(i).getName(); } model.addAttribute("testList", testList); model.addAttribute("source", new Source()); model.addAttribute("environmentList", environmentList); return resolver.resolveViewName("manualTest", Locale.US); } @RequestMapping(value="/manualTest", method=RequestMethod.POST) public String greetingSubmit(@ModelAttribute Source source, Model model) { System.out.println(source.getSourceName()); for(String hello : source.getTestList()) { System.out.println(hello); } model.addAttribute("source", source); return "result"; } }

La plantilla de prueba manual se ve así

<!DOCTYPE html> <html> <head> <title>Insert title here</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action="#" th:action="@{/manualTest}" th:object="${source}" method="post"> <p>Source: <input type="text" th:field="*{sourceName}" /></p> <table border="1"> <tr> <td>Test Name</td> <td th:each="environment : ${environmentList}" th:text="${environment}">Tests</td> </tr> <th:block th:each="test : ${testList}"> <tr> <td th:text="${test.name}">A Test''</td> <th:block th:each="enviro : ${environmentList}"> <td><input type="checkbox" path="${testList}" value="hello" /></td> </th:block> </tr> </th:block> </table> <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p> </form> </body> </html>

Mi problema es que los valores de la casilla no se almacenan en la matriz. Cuando ejecuto este código y hago clic en enviar, obtengo una excepción de puntero nulo porque la lista en el objeto fuente está vacía. SourceName funciona perfectamente, pero las casillas de verificación no agregan nada.


Este código terminó funcionando. Debe pasar un objeto que contiene una lista de arreglos. También ayudó que combiné dos variables en una cadena y luego las separé por -.

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Insert title here</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action="#" th:action="@{/manualTest}" th:object="${source}" method="post"> <table border="1"> <tr> <td>Test Name</td> <td th:each="environment : ${environmentList}" th:text="${environment}">Tests</td> </tr> <th:block th:each="test : ${testList}"> <tr> <td th:text="${test.name}">A Test''</td> <th:block th:each="enviro : ${environmentList}"> <td><input type="checkbox" th:field="*{testList}" th:value="|${test.name}-${enviro}|" /></td> </th:block> </tr> </th:block> </table> <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p> </form> </body> </html>