hle*_*one 3 java spring spring-mvc
这是我的方法的样子:
@RequestMapping(value = "/form", method = RequestMethod.POST)
public String create(@ModelAttribute("foo") @Valid final Foo foo,
final BindingResult result, final Model model) {
if (result.hasErrors())
return form(model);
fooService.store(foo);
return "redirect:/foo";
}
Run Code Online (Sandbox Code Playgroud)
所以,我需要将IP地址绑定Foo可能通过调用对象getRemoteAddr()上HttpServletRequest.我试图创建CustomEditor的Foo,但它似乎并没有被正确的方法.@InitBinder看起来更有希望,但我还没有发现如何.
IP地址在对象上是必需的,而Spring与JSR-303 bean验证相结合将产生验证错误,除非它存在.
解决这个问题最优雅的方法是什么?
您可以使用@ModelAttribute-annotated方法使用IP地址预填充对象:
@ModelAttribute("foo")
public Foo getFoo(HttpServletRequest request) {
Foo foo = new Foo();
foo.setIp(request.getRemoteAddr());
return foo;
}
@InitBinder("foo")
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("ip"); // Don't allow user to override the value
}
Run Code Online (Sandbox Code Playgroud)
编辑:有一种方法@InitBinder只使用:
@InitBinder("foo")
public void initBinder(WebDataBinder binder, HttpServletRequest request) {
binder.setDisallowedFields("ip"); // Don't allow user to override the value
((Foo) binder.getTarget()).setIp(request.getRemoteAddr());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2628 次 |
| 最近记录: |