gpt4 book ai didi

spring - 配置两个@InitBinder 以使用相同的模型或实体但用于不同的@RequestMappings

转载 作者:行者123 更新时间:2023-12-01 23:00:18 25 4
gpt4 key购买 nike

我有一个工作正常的 Controller ,它可以注册和更新一个实体,下面是如何分别创建表单来保存和更新实体

@RequestMapping(value="/registrar.htm", method=RequestMethod.GET)
public String crearRegistrarFormulario(Model model){

}

@RequestMapping(value="/{id}/actualizar.htm", method=RequestMethod.GET)
public String crearActualizarFormulario(@PathVariable("id") String id, Model model){

}

直到这里我没有问题。

我的问题是关于@InitBinder

我需要与 合作同 实体 Deportista (运动员),一种用于保存和更新的特殊设置。例如
@InitBinder
public void registrarInitBinder(WebDataBinder binder) { // register or save
logger.info(">>>>>>>> registrarInitBinder >>>>>>>>>>>>>");

CustomDateEditor customDateEditor = new CustomDateEditor(...

}

@InitBinder
public void actualizarInitBinder(WebDataBinder binder) { // update
logger.info(">>>>>>>> actualizarInitBinder >>>>>>>>>>>>>");

CustomDateEditor customDateEditor = new CustomDateEditor(...

binder.setDisallowedFields(…) //I need this only for update
}

我已阅读以下内容:
  • How to define multiple initBinders
  • Addiing multiple validators using initBinder

  • 提到的链接可以解决不同的问题 entities ,例如 UserCustomer ,它通过 @InitBinder's value属性,但我需要使用相同的实体,如何配置 @InitBinder's value表示 Spring 使用或区分每个 @InitBinder ?一个分别用于保存和更新。

    谢谢

    编辑:来自 Serge Ballesta的回答,以下也是强制性的:
    @Controller
    @RequestMapping(value="/deportista")
    @SessionAttributes(value={"deportistaRegistrar", "deportistaActualizar"})
    public class DeportistaController {


    @RequestMapping(value="/registrar.htm", method=RequestMethod.GET)
    public String crearRegistrarFormulario(Model model){
    Deportista deportista = new Deportista();
    model.addAttribute("deportistaRegistrar", deportista);
    return "deportista.formulario.registro";
    }

    @RequestMapping(value="/{id}/actualizar.htm", method=RequestMethod.GET)
    public String crearActualizarFormulario(@PathVariable("id") String id, Model model){
    Deportista deportista = this.fakeMultipleRepository.findDeportista(id);
    model.addAttribute("deportistaActualizar", deportista);
    return "deportista.formulario.actualizacion";
    }

    它让工作他的答案:
    // registrarInitBinder will be used here
    @RequestMapping(value="/registrar.htm", method=RequestMethod.POST)
    public String doCrearRegistrarFormulario(@ModelAttribute("deportistaRegistrar") XXX value,
    BindingResult result, Model model){

    }

    // actualizarInitBinder will be used here
    @RequestMapping(value="/{id}/actualizar.htm", method=RequestMethod.POST)
    public String crearActualizarFormulario(@PathVariable("id") String id,
    @ModelAttribute("deportistaActualizar") XXX value, BindingResult result, Model model){

    }

    最佳答案

    根据javadoc page for @InitBinder ,您可以在一个 Controller 中使用多个 init-binder,并使用它们将应用到的模型属性变量的名称来专门化它们。例子 :

    @InitBinder("saveValue")
    public void registrarInitBinder(WebDataBinder binder) { // register or save
    logger.info(">>>>>>>> registrarInitBinder >>>>>>>>>>>>>");

    CustomDateEditor customDateEditor = new CustomDateEditor(...

    }

    @InitBinder("updateValue")
    public void actualizarInitBinder(WebDataBinder binder) { // update
    logger.info(">>>>>>>> actualizarInitBinder >>>>>>>>>>>>>");

    CustomDateEditor customDateEditor = new CustomDateEditor(...

    binder.setDisallowedFields(…) //I need this only for update
    }

    然后(XXX 是将被提交处理的表单对象的类型)
    // registrarInitBinder will be used here
    @RequestMapping(value="/registrar.htm", method=RequestMethod.POST)
    public String doCrearRegistrarFormulario(@ModelAttribute("saveValue") XXX value,
    BindingResult result, Model model){

    }

    // actualizarInitBinder will be used here
    @RequestMapping(value="/{id}/actualizar.htm", method=RequestMethod.POST)
    public String crearActualizarFormulario(@PathVariable("id") String id,
    @ModelAttribute("updateValue") XXX value, BindingResult result, Model model){

    }

    关于spring - 配置两个@InitBinder 以使用相同的模型或实体但用于不同的@RequestMappings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25873363/

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