문제

내 컨트롤러 중 하나에서 :

@RequestMapping(value = "search", method = RequestMethod.GET)
public ModelAndView searchUsers(HttpSession session, HttpServletRequest request) {
    UiUserSearchCriteria userSearchCriteria = (UiUserSearchCriteria) session
            .getAttribute("UsersController_userSearchCriteria");

    if (null == userSearchCriteria) {
        userSearchCriteria= defaultUserSearchCriteria;
    }

    // Here be dragons
    return searchUsers(userSearchCriteria, new BeanPropertyBindingResult(userSearchCriteria,
            "userSearchCriteria"), session, request);
}

@RequestMapping(value = "search", method = RequestMethod.POST)
public ModelAndView searchUsers(
        @ModelAttribute("userSearchCriteria") UiUserSearchCriteria userSearchCriteria,
        BindingResult bindingResult, HttpSession session, HttpServletRequest request) {

    userSearchCriteriaValidator.validate(userSearchCriteria, bindingResult);
    if (bindingResult.hasErrors()) {
        // Here be dragons
        return new ModelAndView("searchUsers");
    }

    ModelAndView result = new ModelAndView("redirect:listUsers");
    PagedListHolder<UiUser> userList = new PagedListHolder<UiUser>(
            usersService.searchUsers(userSearchCriteria));

    userList.setPageSize(10);
    userList.setSort(defaultSort);
    userList.resort();
    session.setAttribute("UsersController_userList", userList);
    session.setAttribute("UsersController_userSearchCriteria", userSearchCriteria);

    return result;
}
.

로직은 간단합니다. 사용자가 검색 페이지로 이동하면 실제로 기본 기준으로 검색을 수행하고 목록을 반환합니다 (이것은 요구 사항 변경, HUH)의 결과입니다.

실수 로이 코드에서 문제를 발견했습니다.기본 검색 기준이 유효하지 않을 때 다음과 같습니다. 검색 -> 유효하지 않은 기준으로 검색 -> 검색 기준을 탐색 -> 다른 메소드 (POST와 함께 두 번째 하나씩) -> 유효성 검사 수행 -> errors가 비어 있지 않으므로 searchUsers보기를 반환합니다....에그러나 BindingResult bindingResult는 실제로 이전 메소드 (new BeanPropertyBindingResult(userSearchCriteria, "userSearchCriteria"))에서 Syntethic입니다.그래서 나는 No binding result is bound to session 오류가 발생했습니다 (이에 동의 함).

@ModelAttributeBindingResult 매개 변수를 가질 수 없습니다 (Spring에 의해 바인드 된 것)에서 Pair를 호출하는 데있어 Post를 호출하십시오.

그래서 이것을위한 가장 좋은 해결책은 무엇입니까?

도움이 되었습니까?

해결책

EneraCodiceTag 코드를 적절한 Spring 모델 속성 이름으로 단순히 연결할 수 있습니다.이 방법으로 다음을 수행하십시오.

  BindingResult bindingResult = new BeanPropertyBindingResult(userSearchCriteria, "userSearchCriteria")

model.addAttribute(BindingResult.MODEL_KEY_PREFIX + "userSearchCriteria", bindingResult);
.

특정 모델 속성의 유효성 검사 결과를 바인딩하는 기본 Spring MVC 동작이며 new BeanPropertyBindingResult(userSearchCriteria, "userSearchCriteria") 오류 를 피해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top