본문 바로가기
공부방/오류

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

by SmartCow 2022. 11. 20.

하... 난리도 아니었네..

 

평소처럼 VO를 셋팅하고 등등을 진행하고 있는데 문득 뜬 오류...

 

?????

 

bean name 이 "command" ??? 이런거 내 프로그램에 셋팅한적 없는데?? 라며 오지게 찾아봄...

검색해도 안나옴... 저건 머지...

 

일단 찾다보니 sql-mapper-config.xml에도 VO 등록이 안되어있어서 재빨리 등록!

인데... 이래도 동일한 오류 발생

 

jsp파일에 셋팅한게

<form:form commandName="UserVO" method="post">
          <div class="input_box">
               <div class="input_line clearfix">
                      <span>아이디</span>
                      <form:input type="text" path="userId" placeholder="아이디를 입력하세요" maxlength="20" />
               </div>
               <div class="input_line mr_1 clearfix">
                      <span>비밀번호</span>
                      <form:input type="password" path="userPw" placeholder="비밀번호를 입력하세요" maxlength="16" value="" />
               </div>
          </div>
</form:form>

이부분에서 오류가 나는데 머지??라고 한참 찾아봄

path="userId"를 적은부분에서 오류가 발생한거는 발견함.

근데 왜 오류인지 알수가 없음 지금까지 저렇게 계속 써왔는데 이전에 다른 프로젝트 소스를 봐도 동일함.

 

일단 "command"라는 빈네임에서 멘붕이와서 며칠동안 찾아보게 되었는데

<form:form commandName="UserVO" method="post">

             ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

<form:form modelAttribute="UserVO" method="post">

이렇게 변경하니 해결됨.

commandName아니면 modelAttribute를 사용하는건 알고 있었지만 보통 쓰던걸 쓰게되서 commandName를 계속 쓰고있었는데 여기서 오류가 발생하게 될거라고는 상상도 못함..

 

왜그런가 더 찾아보니 스프링 버전때문에 발생된 문제였다.

 

Spring 4.x까지는 commandName를 사용해도 되었었는데

Spring 5.x부터는 commandName 대신 modelAttribute를 사용해야 오류가 없다고 한다.

 

아오...