提交带有两个请求参数的表单时缺少参数错误

时间:2020-11-12 15:00:48

标签: java mysql spring spring-mvc thymeleaf

下面是来自控制器的代码,我旨在确保它从前端接口接收两个输入参数(名称和代码)。

该页面在提交表单中包含两个参数,即“名称”和“代码”。

@RequestMapping(method = RequestMethod.POST)
    public String transfer(@RequestParam(name = "name") String name,
                         @RequestParam(name = "code") String code,
                         Errors errors, RedirectAttributes redirectAttributes) {

        try {
            User userToBeTransferred = usersRepository.findByName(name);
            userToBeTransferred.setTransferred(true);

            Region regionOfTransference = regionsRepository.findByCode(code);
            regionOfTransference.setPopulationNumber(regionOfTransference.getPopulationNumber() + 1);

            userToBeTransferred.setRegion(regionOfTransference);

            usersRepository.save(userToBeTransferred);
            regionsRepository.save(regionOfTransference);

            return "redirect:/section/users/new";
        } catch (IllegalArgumentException e) {
            return "htmlPageOne";
        }
    }

首页表格:

<form class="form-horizontal" method="POST" action="/section/users/new" th:object="${user}">

            <input type="hidden" th:field="*{id}"/>
                <div class="form-group row">
                <label for="name" class="col-form-label">User name</label>
                <input type="text" class="form-control" id="name" th:field="*{name}" name="name"/></div>
            <div class="form-group row">
                <label for="code" class="col-form-label">Code</label>
                <input type="text" class="form-control" id="code" th:field="*{region.code}" name="code"/></div>
            <button type="submit" class="btn btn-primary col-sm-6 ">Save</button>
        </form>

由于某种原因,单击提交表单后出现以下错误:

There was an unexpected error (type=Bad Request, status=400).
Required String parameter 'code' is not present
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'code' is not present

我不确定我是否正确使用了requestparams,所以也许与此有关吗?我不知道,我已经坚持了几个小时,如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题在于th:field="*{region.code}"将您的name属性覆盖到name="region.code"中。您可以通过使用浏览器的开发工具检查呈现的<input>元素来判断。

您可以更改以下内容

th:field="*{region.code}"

...进入:

th:value="${user.region.code}"
相关问题