简体   繁体   English

通过带注释的@ModelAttribute方法将Spring Controller方法从模型绑定中排除

[英]Exclude Spring Controller method from model binding through annotated @ModelAttribute method

I'm getting an invalid request for method getIndex because request parameter id is missing. 我收到对方法getIndex的无效请求,因为缺少请求参数ID。 Can I specify that I don't want model binding for that requestmapping method? 我可以指定我不希望该请求映射方法进行模型绑定吗?

@Controller
@RequestMapping ("/admin/admins")
public class AdminUserController {
@RequestMapping (method = RequestMethod.GET)
    public String getIndex(ModelMap model) {
        model.addAttribute("admins",userService.findAllAdmins());
        return "admin/admins/list";
    }

@ModelAttribute("user")
    public AdminUser getAdminUser(@RequestParam("id") Integer id) {
        return userService.findAdminById(id);
    }




    @RequestMapping (method = RequestMethod.POST) 
    public String registerAdmin(@Valid @ModelAttribute("user") AdminUser user, BindingResult bindingResult, ModelMap model)  {

        model.addAttribute("roles", userRoleService.findAll());
        if (bindingResult.hasErrors()) {
            return "admin/admins/form";
        } 
        else if (!user.getPassword().equals(user.getConfirmPassword())) {
            bindingResult.addError(new FieldError("user","confirmPassword", "Passwords don't match"));
            return "admin/admins/form";
        }
        else {
            user.setPassword(passwordEncoder.encodePassword(user.getPassword(), null));
            try {
                userService.save(user);
                return "redirect:/admin/admins";
            } catch(ApplicationException ce) {
                bindingResult.addError(new FieldError("user", "email", "Email already registered"));
                return "admin/admins/form";
            }

        }

    }

You could make your id parameter optional 您可以将id参数设为可选

@ModelAttribute("user")
public AdminUser getAdminUser(@RequestParam(value="id", required=false) Integer id) {
    if(id==null){
        return new AdminUser();
    }
    return userService.findAdminById(id);
}

Edit: Or loose the ModelMap paramter: 编辑:或松开ModelMap参数:

@RequestMapping (method = RequestMethod.GET)
public ModelAndView getIndex() {
    return new ModelAndView("admin/admins/list", "admins",userService.findAllAdmins());
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在@ModelAttribute注释方法中返回Spring模型 - Returning a Spring Model in a @ModelAttribute annotated method Spring MVC @ModelAttribute @SessionAttributes-为什么模型属性需要带@ModelAttribute注释的方法? - Spring MVC @ModelAttribute @SessionAttributes - Why does a model attribute need a @ModelAttribute annotated method? 通过jsp将参数发送到@ModelAttribute注释的方法 - Send parameter to @ModelAttribute annotated method from jsp @ModelAttribute在方法签名中使用@ModelAttribute注释方法 - @ModelAttribute annotated method WITH @ModelAttribute in method signature 如何在Spring Controller方法中从许多@RequestParam参数切换到@ModelAttribute - How to switch from many @RequestParam arguments to @ModelAttribute in a Spring Controller method 在Spring Controller方法中使ModelAttribute可选 - Making ModelAttribute optional in Spring Controller method 何时精确调用@ModelAttribute带注释的方法? - When is a @ModelAttribute annotated method called precisely? 在GET METHOD弹簧注释的控制器上添加错误 - Add Error on GET METHOD Spring annotated controller 在单元测试中模拟Spring Controller方法模型绑定 - Simulate Spring Controller method model binding in unit test 使用 Spring AOP 从带注释的方法中获取带注释的参数值 - Get annotated param value from annotated method using Spring AOP
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM