用thymeleaf将参数传递给spring controller

时间:2016-09-23 07:09:42

标签: java spring spring-mvc thymeleaf

我无法使用thymeleaf 3将args从html传递给spring mvc 4 controller。

这是控制器:

// Handler method for inserting currency:
@RequestMapping(value = "/saveCurrency", method = RequestMethod.POST)
public ModelAndView saveCurrency(@ModelAttribute("currency") Currency currency, BindingResult bindingResult, Model model)
{
    model.addAttribute("currency", currency);
    currDAO.insert(currency);

    return new ModelAndView("redirect:/listCurr");
}

和html表单:

<form action="/saveCurrency" th:action="@{/saveCurrency}" th:object="${currency}" th:method="post">
    <input id="nameTB" type="text" th:field="*{name}" class="form-control" maxlength="3" style="text-transform:uppercase" />
    ...
</form>

我还有类货币,字段为“id”和“name”,并且有getter和setter。 现在使用此代码我收到错误:

  

SEVERE:servlet [dispatcher]的Servlet.service()与上下文有关   path []引发异常[请求处理失败;嵌套异常   是org.thymeleaf.exceptions.TemplateInputException:发生错误   在模板解析期间(模板:“ServletContext资源   [/WEB-INF/views/listCurr.html]“)]有根本原因

     

java.lang.IllegalStateException:既不是BindingResult也不是plain   bean名称'currency'的目标对象可用作请求属性

知道我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

问题是先前未设置模型属性。您需要一些请求映射方法来设置模型属性:

@RequestMapping(value = "/currency", method = RequestMethod.GET)
public String currencyPage(Model model) {
    model.addAttribute("currency", new Currency());
    return "listCurr";
}

旁注:在您的方法中,您不需要设置&#34;货币&#34;模型attr。再次。此外,您想在保存货币之前检查BindingResult是否有错误:

if(!bindingResult.hasErrors()) {
    currDAO.insert(currency);
}

答案 1 :(得分:0)

不要重定向,返回带有视图的模型。

model.addAttribute("currency", currency);
return new ModelAndView("listr");