Use HashMap as Spring MVC + ThymeLeaf Bean Form Support

I am new to Spring MVC (from Grails). Can HashMap be used as form support bean?

In Grails, one has access to an object called params from any controller action. Params is simply a map containing the values โ€‹โ€‹of all fields included in the POSTed data. From what I've read so far, I need to create bean form support for all of my forms.

Is it possible to use Maps as a support object?

+3


source to share


1 answer


You don't need to use a form support object for this. If you just want to access the parameters passed on request (e.g. POST, GET ...), you need to get the parameter map using the method HttpServletRequest#getParameterMap

. See an example that prints all name and value parameters to the console.

On the other hand. If you want to use a binding, you can wrap the object Map

in a bean form support.

controller



import java.util.Arrays;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class ParameterMapController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String render() {
        return "main.html";
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String submit(HttpServletRequest req) {
        Map<String, String[]> parameterMap = req.getParameterMap();
        for (Entry<String, String[]> entry : parameterMap.entrySet()) {
            System.out.println(entry.getKey() + " = " + Arrays.toString(entry.getValue()));
        }

        return "redirect:/";
    }
}

      

main.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8" />
</head>
<body>

<form th:action="@{/}" method="post">
    <label for="value1">Value 1</label>
    <input type="text" name="value1" />

    <label for="value2">Value 2</label>
    <input type="text" name="value2" />

    <label for="value3">Value 3</label>
    <input type="text" name="value3" />

    <input type="submit" value="submit" />
</form>

</body>
</html>

      

+5


source







All Articles