У меня есть контроллер, где работает нормально, он может регистрировать и обновлять сущность, а также как создавать формы для сохранения и обновления субъект, соответственноНастроить два @InitBinder для работы с одной и той же моделью или сущностью, но для разных @RequestMappings
@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
(Sportsman), один специальной настройки для сохранения и обновления. Например
@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
}
Я прочитал следующее:
ссылки, упомянутые работы по разным entities
, например User
и Customer
, это через @InitBinder's value
атрибут, но мне нужно работать с одним и тем же объектом, ho w Я могу настроить @InitBinder's value
, чтобы указать использование пружины или различать каждый @InitBinder
? один для сохранения и обновления соответственно.
Благодаря
Edit: С ответе Serge Ballesta
«s, следующий обязательно тоже:
@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){
…
}
Большое спасибо! –
Это работает для '@ ModelAttribute', но мои контроллеры аннотируются с помощью' @ RequestBody' вместо этого, который десериализует json для моего pojo и '@ requestbody', не дает аналогичного способа указать, какое связующее использовать. Есть ли решение, которое будет использоваться с @requestbody – mickeymoon
Как я и искал, для \ @RequestBody используйте \ @InitBinder ("myclass"), а затем в сигнатуре метода: \ @RequestMapping (value = "view", params = "stuff = stuff") public void update (\ @ Valid \ @ModelAttribute MyClass o, результат BindingResult, ... и т. д. –