为什么initbinder没有调用提交表单?

我有一个表格,但是当我提交它时,我的initbinder不会拦截我的发帖请求。这是我的initbinder:

@InitBinder(value="confermaDto")

protected void initBinderDto(final WebDataBinder binder, final Locale locale) {

binder.registerCustomEditor(MyClass.class, myClassEditor);

}

这是我拦截帖子的方法:

@RequestMapping(value="confermaDati", method = RequestMethod.POST)

public String confermaDati(@Valid final ConfermaDatiAttrezzaturaDto confermaDto,

final BindingResult bindingResult, final Model uiModel, final HttpServletRequest httpServletRequest) {

if (bindingResult.hasErrors()) {

uiModel.addAttribute("message", "Errore Salvataggio");

uiModel.addAttribute("dto", confermaDto);

}

uiModel.asMap().clear();

return "redirect:/";

}

我认为,它应该起作用,因为initbinder中的值与我的模型属性的名称相等。那为什么不起作用呢?

谢谢

回答:

应该使用此init-binder方法的命令/表单属性和/或请求参数的名称。

默认值是应用于由注释的处理程序类处理的所有命令/表单属性和所有请求参数。 ,而通常将不同的init-binder方法应用于不同的属性或参数组。

以上是从的javadoc的@InitBinder

在您的代码中,指定要使用的模型属性的名称,即confermaDto。但是,在您的请求处理方法中,没有模型属性的概念(即,没有使用注释@ModelAttribute)。

public String confermaDati(@Valid final ConfermaDatiAttrezzaturaDto confermaDto, final BindingResult bindingResult, final Model uiModel, final HttpServletRequest httpServletRequest) { ... }

你有一个注释参数与@Valid这只会触发验证,spring还会从请求实例化这个对象,并把值设置到它但它是

指定为一个模型属性。在@Valid注释旁边添加@ModelAttribute注释。(或从@InitBinder注释中删除名称,以便始终使用它)。

我认为这应该起作用,因为initbinder中的值和我的模型属性的名称相等。那为什么不起作用呢?

简而言之,要回答这个问题,方法参数名称是相等的,但是没有模型属性。因此,没有触发该@InitBinder方法。

以上是 为什么initbinder没有调用提交表单? 的全部内容, 来源链接: utcz.com/qa/402554.html

回到顶部