我是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 对象?
答案 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();