如何从Spring MVC方法控制器检索表单中插入的数据?

时间:2015-11-10 16:28:34

标签: spring spring-mvc thymeleaf

我是Spring MVC的新手,我正在开发一个使用 Thymeleaf 作为视图技术的Spring MVC应用程序。

所以,在这个视图中,我有一个绑定到模型对象的表单,如下所示:

<form id="datiAinmatoreDigitale" th:object="${datiAnimatoreForm}" method="post" th:action="@{/salvaDatiAnagraficiAD}">
    <div class="row text-left rigaNominaAnimatoreDigitale">
        <div class="col-md-4 leftAlligned">
            <label for="nomeAD">Nome docente:</label>
        </div>

        <div class="col-md-8 leftAlligned">
            <input id="nomeAD" class="form-control" type="text" th:field="*{nome}"/>
        </div>
   </div>

   .............................................................
   .............................................................
   .............................................................
   SOME OTHER FIELDS
   .............................................................
   .............................................................
   .............................................................

   <button type="submit" class="btn btn-default" style="color: #0F8BB0; margin-right: 10px;">Save</button>
</form> 

正如您所看到的,当用户点击保存按钮时,表单会通过POST请求提交给 / salvaDatiAnagraficiAD 资源,该资源由此方法定义到控制器类:

@RequestMapping(value = "/salvaDatiAnagraficiAD", method = RequestMethod.POST)
    public String salvaDatiAnagraficiAD(HttpServletRequest request, Model model, Locale locale) throws JsonParseException, JsonMappingException, IOException {

    System.out.println("INTO salvaDatiAnagraficiAD()");

    return "blablabla";

}

好的,它有效,我在提交表单时正确地输入了 salvaDatiAnagraficiAD()方法。

现在我的问题是:如何从 salvaDatiAnagraficiAD()控制器方法中检索插入到上一个表单中的数据?

我试图实现类似的东西(根据我项目中的一些代码找到)但它无法正常工作(抛出异常,所以我认为这不是正确的方法):

@RequestMapping(value = "/salvaDatiAnagraficiAD", method = RequestMethod.POST)
public String salvaDatiAnagraficiAD(HttpServletRequest request, Model model, Locale locale) throws JsonParseException, JsonMappingException, IOException {

    System.out.println("INTO salvaDatiAnagraficiAD()");


    DefaultMultipartHttpServletRequest multipartRequest = (DefaultMultipartHttpServletRequest) request;

    ObjectMapper mapper = new ObjectMapper();

    AnimatoreForm datiAnimatoreForm = mapper.readValue(multipartRequest.getParameterMap().get("form")[0], AnimatoreForm.class);

    return "blablabla";

}

我错过了什么?如何正确检索插入到表单中的数据并将这些数据放入 AnimatoreForm 对象?

1 个答案:

答案 0 :(得分:0)

您可以在方法signutare中将注释@RequestParam与Map对象一起使用。 像:

@RequestMapping(value = "/salvaDatiAnagraficiAD", method = RequestMethod.POST)
public String salvaDatiAnagraficiAD(@RequestParam Map<String, String> params, HttpServletRequest request, Model model, Locale locale) throws JsonParseException, JsonMappingException, IOException {
return null;}

在方法体中,您可以使用

访问表单中的所有参数
params.get("input-name");

在你的例子中,它将是

params.get("nome");

另一个选项是,您使用控制器方法签名

中表单中的对象
@RequestMapping(value = "/salvaDatiAnagraficiAD", method = RequestMethod.POST)
public String salvaDatiAnagraficiAD(AnimatoreForm datiAnimatoreForm, HttpServletRequest request, Model model, Locale locale) throws JsonParseException, JsonMappingException, IOException {
    return null;
}

因此可以使用您的对象访问输入字段

datiAnimatoreForm.getNome();