Spring MVC - 提交表单400错误

时间:2014-11-11 17:52:58

标签: spring forms jsp spring-mvc

我刚刚开始使用Spring MVC编写应用程序。我有2个实体,区和&市。一个城市有很多区,每个区都属于一个城市。

在district.jsp中我声明了一个表单,允许用户输入地区名称和一个选择框来选择它所属的城市。

区实体看起来像这样:

<form:form action="${aAction}" commandName="district">
<table>
    <c:if test="${!empty district.districtName}">
    <tr>
        <td>
            <form:label path="id">
                <spring:message text="ID"/>
            </form:label>
        </td>
        <td>
            <form:input path="id" readonly="true" size="8"  disabled="true" />
            <form:hidden path="id" />
        </td> 
    </tr>
    </c:if>
    <tr>
        <td>
            <form:label path="districtName">
                <spring:message text="District Name"/>
            </form:label>
        </td>
        <td>
            <form:input path="districtName" />
        </td> 
    </tr>
    <tr>
        <td>
            <form:label path="belongToCity">
                <spring:message text="Belong to City"/>
            </form:label>
        </td>
        <td>
            <c:if test="${!empty listCities}">
                    <form:select path="belongToCity" items="${listCities}" itemLabel="cityName" itemValue="id"></form:select>
            </c:if>
        </td> 
    </tr>
    <tr>
        <td colspan="2">
            <c:if test="${!empty district.districtName}">
                <input type="submit"
                    value="<spring:message text="Edit District"/>" />
            </c:if>
            <c:if test="${empty district.districtName}">
                <input type="submit"
                    value="<spring:message text="Add District"/>" />
            </c:if>
        </td>
    </tr>
</table>    
</form:form>

在我的区控制器中,我声明添加操作。

@RequestMapping(value = {"/district/add"}, method = RequestMethod.POST)
    public String addDistrict(@ModelAttribute("district") District p,Model model,  BindingResult result) {
        if(result.hasErrors()) {
            return "district";
        }
        this.districtService.addDistrict(p);
        return "district";
    }

但是,当我运行我的项目时,它会显示400错误和错误消息:&#34;客户端发送的请求在语法上是不正确的。&#34;

我怀疑我的表单在某处错了,也许它无法发布到控制器处理。有人可以帮我确定问题吗?

1 个答案:

答案 0 :(得分:1)

您的BindingResult参数应与modelAttribute相邻。下面应该是方法签名。

@RequestMapping(value = {"/district/add"}, method = RequestMethod.POST)
    public String addDistrict(@ModelAttribute("district") District p,  BindingResult result, Model model) {
        if(result.hasErrors()) {
            return "district";
        }
        this.districtService.addDistrict(p);
        return "district";
    }