javax.el.PropertyNotFoundException: Property '. . .' not found on type . . .
위 에러는
${person.name} 와 같이
EL구문을 사용하는 과정에서 name 에 해당하는 프로퍼티를 찾지 못한 경우이다.
el구문을 사용하기 위해서는 dto를 자바빈즈 규약에 맞게 만들어야 하는데,
Person dto의 멤버변수인 name이
1. Name으로 앞에 대문자가 오는 경우
2. nAme처럼 두 번째에 대문자가 오는 경우
두 경우에서는 에러가 발생한다.
1번 경우
통상적으로 getter와 setter는 get / set + (앞 글자를 대문자로 바꾼 멤버변수 명)으로 이루어지는데,
name 같은 경우의 getter는 getName()이 될 것이다.
그리고
el구문이 프로퍼티를 찾는 과정은
getName()에서 get을 뺀 이름이 프로퍼티가 되어 그 이름을 찾는데
멤버변수가 이미 Name이라면, 정상적으로 프로퍼티를 찾을 수 없게 되는 것이다.
2번 경우
최근에 이 문제로 에러가 또 났었다. 하지만 1번 경우가 아닌
pName, pPrice 와 같이
맨 앞글자는 소문자이고 두 번째 글자가 대문자인 경우였는데, 이 경우에도 정상적으로 프로퍼티를 찾지 못해 PropertyNotFoundException이 발생했다.
이 경우의 이유는 정확하게 모르겠지만 두 번째 글자까지는 대문자를 쓰지 않는 것이 좋겠다는 결론을 얻었다.
⭐결론⭐
카멜케이스 쓰는건 좋지만 두 번째 자리까지는 대문자 쓰지 말자!