2010-04-27 3 views
0

Я пытаюсь понять, как привязка объектов работает весной mvc. У меня есть контроллер, созданный следующим образом, и хочу, чтобы шаблон freemarker связывался с accessRequestBean. В шаблоне у меня есть «< @ spring.bind» command.accessRequestBean «/>», но это вызывает ошибки ... Как связать форму с POJO?Spring MVC POJO Bind Explaination

@Controller 
@PreAuthorize("isAuthenticated()") 
@RequestMapping("/access") 
public class RemoteVendorAccessController { 
    private Logger logger = Logger.getLogger(this.getClass().getName()); 

    @Autowired 
    private AdDao adDao; 

    @Autowired 
    private CadaDao cadaDao; 

    @Autowired 
    private UserAccessCache userAccessCache; 

    private AccessRequestBean accessRequestBean; 

    @RequestMapping(method = RequestMethod.GET) 
    public String requestAccess(ModelMap map){ 
     String username = SecurityContextHolder.getContext().getAuthentication().getName(); 
     map.addAttribute("title", "Remote Vendor Access Request Form"); 

     try { 
      AdUser user = adDao.getUserFromNt(username); 
      map.addAttribute("user", user); 
     } catch (UserDoesNotExistException e) { 
      String error = "Could not get user information from AD"; 
      map.addAttribute("error", error); 
      logger.error(error + "[" + username + "]", e); 
     } 

     // Get users manager 
     AdUser manager = null; 
     try { 
      manager = adDao.getManagerFromNt(username); 
      map.addAttribute("manager", manager);   
     } catch (Exception e) { 
      String error = "Could not get manager information from AD"; 
      map.addAttribute("error", error); 
      logger.error(error + "[" + username + "]", e); 
     } 

     return("access"); 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String processRequest(ModelMap map){ 
      // Want to validate POJO bean here   
     return(null); 
    } 

    public AccessRequestBean getAccessRequestBean() { 
     return accessRequestBean; 
    } 

    public void setAccessRequestBean(AccessRequestBean accessRequestBean) { 
     this.accessRequestBean = accessRequestBean; 
    } 


} 

ответ

2

Согласно Spring Documentation, контроллер получает ссылку на объект, содержащий данные, введенные в форме, используя аннотацию @ModelAttribute от параметра метода. Тип параметра будет вашим классом POJO, который соответствует объекту, используемому для создания формы в шаблоне редактирования. т.е.

@RequestMapping(method = RequestMethod.POST) 
public String processRequest(
     @ModelAttribute POJO pojo, 
     BindingResult result, 
     ModelMap map){ 
    new POJOValidator().validate(pojo, result); 
    if (result.hasErrors()) { 
     return "pojoForm"; 
    } 
    . 
    . 
    . 
    return(null); 
} 
+0

сейчас, после того, как валидатор завершил работу и возникла некоторая ошибка, как вы получаете доступ к ошибкам BidingResult? В частности, используя freemarker? с некоторыми проблемами, выясняя это. – wuntee

Смежные вопросы