我需要将查询字符串参数传递给 Spring 命令 bean。我刚刚尝试了以下解决方法。
<c:if test="${not empty param.id}">
<form:input path="id"/>
</c:if>
令我惊讶的是,它会自动将查询字符串(类似于http://localhost:8080/xxx/aaa.htm?id=100
)上提供的值设置为相应的命令 bean。这正是我想要实现的目标,但我完全不知道为什么会发生这种情况。
为什么以及如何自动将参数设置为命令 bean 的相应属性?
在命令 bean 中,此参数映射到类型为 的属性java.lang.Long
。因此,如果我将此参数修改为不表示为类似 的Long
值的值xxx
,那么我希望它会导致引发适当的异常,但事实并非如此。
如果我尝试传递一个不是Long
值的字符串(如xxx
),那么它会导致 - HTTP 状态 400,
客户端发送的请求在语法上不正确。
我很不确定这种行为。为什么会这样?
当用户在不表示为的 URL 中更改此参数时Long
,我想显示适当的用户友好错误消息。为此,我注册了几个自定义属性编辑器(它们按原样工作),但是为了让 Spring 从属性文件中显示适当的错误消息,应该引起适当的异常,然后由 Spring 使用该异常和适当的错误显示来自属性文件的消息。
我正在使用 Spring 框架 3.2.0。
编辑:
问题的第二部分(HTTP 状态为 400 的部分)中的问题已解决。这是因为我没有收到与Spring 控制器类中的 HTTP 请求BindingResult
映射的方法中的参数,这是必要的,例如,GET
@RequestMapping(method={RequestMethod.GET}, value={"admin_side/Country"})
private String showForm(@ModelAttribute("countryBean") CountryBean command, BindingResult errors, Map model)
{
//...
}
该BindingResult errors
参数先前丢失,因此无法报告错误。它现在按预期工作。
一个问题仍然存在,就像我真的不明白的第一部分一样。为什么以及如何将此查询字符串参数id
绑定到 Spring 命令 bean(自动)?请告诉我。