gpt4 book ai didi

java - 有没有办法将超过 1 个 validator 与 Spring 3 注释 Controller 一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:03 25 4
gpt4 key购买 nike

我有一个扩展 SimpleFormController 的 Spring 2.x Controller ,从 Spring 3 开始,它已被弃用,取而代之的是带注释的 Controller 。所以我试图将它转换为使用 @Controller,使用 @InitBinder@Valid 进行表单验证。但是,我找不到将多个 validator 与 Spring 3.x Controller 一起使用的方法。我该怎么做?

这是我的 Controller 的 bean def 当前的样子:

<bean name="/s/account" class="mywork.AccountSettingsController"
p:formView="forms/account"
p:successView="redirect:/app/s/account"
p:commandName="accountSettingsForm">
<property name="validators">
<list>
<ref bean="emailFormatValidator" />
<ref bean="uniqueEmailValidator" />
<ref bean="changeEmailValidator" />
<ref bean="passwordWithConfirmationValidator" />
<ref bean="changePasswordValidator" />
</list>
</property>
</bean>

它是一个页面的 Controller ,允许用户更改他们的电子邮件地址和密码。 validator bean 是遗留代码,但我猜它们被分成了单独的类以实现更好的可重用性。

我正在尝试使用注释将所有这些移动到 Controller 类本身:

@Controller
@Secured({BaseController.ROLE_LOGGED_IN})
@RequestMapping("/s/account")
public class AccountSettingsController extends BaseController {
private static final String FORM_URL = "/forms/account";
private static final String FORM_NAME = "accountSettingsForm";

@InitBinder(FORM_NAME)
public void initBinder(WebDataBinder binder) {
// TODO: how to inject > 1 validator for the form?
binder.setValidator(...);
}

@RequestMapping(method = RequestMethod.GET)
public ModelAndView get() {
ChangePasswordOrEmailForm form = new ChangePasswordOrEmailForm();
...
return new ModelAndView(FORM_URL, FORM_NAME, form);
}
...
}

据我所知,Spring 3 假定之间存在一对一的关系:Controller-Form-WebDataBinder-Validator。我可以创建一个复合 validator 来聚合 5 个单独的 validator bean,并将 Validator#supports()Validator#validate() 调用委托(delegate)给它们,但这真的是这样吗?最佳解决方案?

最佳答案

我认为的另一个是有一个 ValidatorFacade,它依次调用所有其他 validator ,这样你就不需要注入(inject)而是将 ValidatorFacade 与 initBinder 和 @Valid 附加在前面,你的表单 bean 将自动调用ValidatorFacade 和一切都自动处理。只是一个想法。

关于java - 有没有办法将超过 1 个 validator 与 Spring 3 注释 Controller 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com