Spring

중간 모델 클래스없이 목록을 뷰에 바인딩하는 방법은 무엇입니까?

기록만이살길 2021. 3. 4. 08:03
반응형

중간 모델 클래스없이 List을 뷰에 바인딩하는 방법은 무엇입니까?

1. 질문(문제점):

잘 작동하는 코드가 있습니다.

저장소에서 데이터를 검색하고이를 listPlaces로 설정하고 listPlaces를보기에 바인드합니다.

제어 장치

ListPlaces listPlaces = new ListPlaces();
listPlaces.setListPlaces(placeRepository.selectPlaces(idUser));

ModelAndView modelAndView = new ModelAndView("/myplaces.html");
modelAndView.addObject("listPlacesBind", listPlaces);

모델

public class ListPlaces {
    
    private List<Place> listPlaces;

    public List<Place> getListPlaces() {
        return listPlaces;
    }

    public void setListPlaces(List<Place> listPlaces) {
        this.listPlaces = listPlaces;
    }
    
}

전망

<th:block th:each="place, itemStat : *{listPlaces}">                    
<span th:text="*{listPlaces[__${itemStat.index}__].codPlace}" />

그런 다음 다음을 수행하여이 코드를 단순화 할 수 있다는 생각이 들었습니다.

  1. ListPlaces 모델 클래스 제거
  2. 컨트롤러 코드를 다음과 같이 변경했습니다.
List<Place> listPlaces;
listPlaces = placeRepository.selectPlaces(idUser);

ModelAndView modelAndView = new ModelAndView("/myplaces.html");
modelAndView.addObject("listPlacesBind", listPlaces);

즉, 중간에 모델 클래스를 사용하는 대신 컨트롤러에서 List을 직접 만들어 뷰에 바인딩하려고했습니다.

하지만 다음과 같은 오류가 발생합니다.

Property or field 'listPlaces' cannot be found on object of type 'java.util.ArrayList' - maybe not public or not valid?

디버그 모드에서 실행하기 위해 listPlaces를 "감시"보기로 설정했습니다.

첫 번째 경우에는 두 수준의 "listPlaces"를 만들고 두 번째 경우에는 한 수준 만 만듭니다.

두 번째 수준이 누락 된 것 같습니다.

그렇다면 미들 모델 클래스 없이는 이것을 할 수 없습니까?

아마도 중산층이 필요없이 두 번째 수준을 추가하는 방법이있을 것입니다.

2. 해결방안:

모든 관련 코드를 표시하지는 않았지만 누락 된 부분을 추측하고 필요한 경우 변경합니다. 한 가지 옵션은 다음과 같이 컨트롤러 방법을 변경하는 것입니다.

@GetMapping("/myplaces")
public String whateverIsTheName(Model model) {
    model.addAttribute("listPlaces", placeRepository.selectPlaces(idUser));
    return "myplaces";
}

중간 클래스를 만들지 않고도 Model위와 같이 사용할 수 있으며이 속성이있는 객체가 있도록 ' 두 수준 '을 유지할 수 있습니다 listPlaces.

65750672
반응형