• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

th:field 부분이 데이터 입력처리시 에러가납니다.

20.06.25 18:58 작성 조회수 902

0

강좌에 나와있는대로 form class를 만들고, 타임리프를 이용하여 form 태그에 th:object 를 선언했습니다.

인풋박스에 th:field 를 사용했는데 자동완성이 안됐지만 컴파일시 오류가 없어, 문제없다고 생각했는데, 데이터 입력후 post전송을하니 th:field 부분에서 오류가 났습니다.

찾아봐도 잘 모르겠어서 문의드립니다.

답변 3

·

답변을 작성해보세요.

1

김대호님의 프로필

김대호

2020.06.30

네 답변 너무 감사드립니다.

오류때문에 수정을 많이 하다보니 제대로확인을 못했던거 같습니다.

오류내용부터 꼼꼼히 확인해봐야겠네요.

참고로, 타임리프 에러는 컨트롤러에서 form에 빈객체를 전달할때 addAttribute가 아닌 매개변수로 전달하는 방식으로 수정해서 최종해결됐습니다.

1

소스코드 확인했습니다.

1. th:field는 다음과 같은 오류가 발생했습니다.

Neither BindingResult nor plain target object for bean name 'eventForm' available as request attribute

eventForm이라는 이름의 폼 객체가 등록되어 있지 않은 오류입니다.

컨트롤러를 확인해보면 실제 eventForm이라는 폼이 등록되지 않습니다.

    @PostMapping("/basicForm")

    public String setEventBasic(@Valid ReqEventForm reqEventForm, BindingResult result) {}

이런경우 다음과 같이 @ModelAttribute("eventForm")으로 이름을 지정해주면 됩니다.

    @PostMapping("/basicForm")

    public String setEventBasic(@Valid @ModelAttribute("eventForm") ReqEventForm reqEventForm, BindingResult result) {

2. Event 클래스의 빌더 사용문제

- 상위에 EventCategory eventCategory;가 초기화 되어 있지 않습니다.

        EventCategory eventCategory = null;로 초기화 하면 됩니다.

- 추가로 Event 클래스에 @Builder가 2개 있습니다. 하나만 사용하셔야 합니다.

도움이 되셨길 바래요^^

0

안녕하세요. 김대호님

도움을 드리고 싶은데, 어떤 오류가 발생했는지 내용이 없어서 도움을 드리기가 어렵습니다.

전체 소스코드를 압축해서 어떤 부분에서 오류가 발생하는지 zipkyh@naver.com으로 메일을 주시면 도움을 드릴께요.

감사합니다.