2012-12-20 47 views
0

我想在控制器中指定BindingResult的实现类型。有没有办法做到这一点?目前看来,Spring必须确定实现类型本身(这恰好是一个BeanPropertyBindingResult)。我怀疑有一个配置是我在某处丢失的,或者我只需要在Controller的方法签名中指定实际的类型。在Spring中,如何指定BindingResult实现

例子:

/** 
* {@inheritDoc} 
*/ 
@Override 
public ModelAndView continue(@ModelAttribute("model") @Valid final T model, final BindingResult results) { ... } 
+0

为什么你需要一个BindingResult的具体实现? – hyness

+0

我试图扩展Spring的ObjectError和FieldError对象,以包含验证消息的错误级别(即:info,warn,error)。现在,Spring正在确定BindingResult(这是我在验证过程中添加错误的地方)。我需要能够保证实施类型,以便新的错误正常工作。 – Mostfoolish

回答

-1

您必须添加的ModelAndView在前面的@ModelAttribute像:

public ModelAndView continue(ModelAndView model, @ModelAttribute("model") ObjectType objectName){ 
} 
+0

这是如何影响BindingResult的? – Mostfoolish

1

你不需要自定义BindingResult你想要做什么。您需要实现BindingErrorProcessor并在WebDataBinder中使用它。它负责将错误添加到BindingResult并允许您使用自定义错误实施。这里是你将如何使用它在你的控制器......

@Controller 
public class MyFormController { 
    ... 

    @InitBinder 
    public void initBinder(WebDataBinder binder) { 
     binder.setBindingErrorProcessor(new MyCustomBindingErrorProcessor()); 
    } 
} 

混合绑定和验证是不好的做法,类应该有一个单一的责任。你不应该在BindingResult本身进行验证。

+0

我的意图不是混合绑定和错误。只有这些错误才会添加到BindingResult。虽然我知道Spring会自动实例化BeanPropertyBindingResult,但它必须默认这样做,因为我没有故意设置它。我以为我想故意设置实现类,这样如果Spring决定为一些未知的(至少是我)理由实例化一个不同的类,我就不会遇到问题。 – Mostfoolish

+0

据我可以告诉代码,设置一个BindingResult实现是不可插入的。在DataBinder中,它与其他配置一起在initBeanPropertyAccess方法中实例化。此外,国际海事组织你仍然没有给出你需要使用自定义实施的充分理由。 BindingErrorProcessor是否足以满足你需要做的事情? – hyness

+0

老实说,我不确定我想要一个自定义的。我只是想能够指定哪个实现 - 实现仍然可以是原始的BeanPropertyBindingResult。我只是担心Spring可能会选择在另一个控制器上实例化不同的实现,原因是我不知道。 – Mostfoolish