ejyoo's 개발 노트

java.lang.NumberFormatException: For input string : "id" 본문

카테고리 없음

java.lang.NumberFormatException: For input string : "id"

ejyoovV 2021. 5. 13. 18:51

발생 상황

EL 표기법을 사용하여 멤버리스트에 있는 id값을 가져오려고 할 때 발생하였음.

 

기억해야 할 사항

  • EL은 내장객체를 간편하게 뽑아내는 역할이다.
  • List의 데이터를 뽑을 때, get(index)를 입력한다.

발생 원인

memberList에 있는 데이터를 가져오고자 하는 경우 get(index) 형식으로 가져와야 한다.

memberList.id

 

위의 코드로는 id 가 index가 아니므로, NumberFormatException이 발생하는 것이다.

 

 

더 나아가보기 - 위의 코드가 잘된 코드인가? NO

그렇다면 위의 문장이 잘된것인가? 그렇지 않다.

memberList에는 memberVO가 있는데,

단계적으로 접근해야한다.

즉 memberVO에 접근하여 id를 가져와야한다.

 

따라서 위의문장인 memberList에서 바로 id를 가져오는것은 의미가 이상하다.

 

단계적 접근 1. memberList에 있는 memberVO 접근하기

memberList에 있는 memberVO에 접근하려면 보통 아래의 코드로 작성한다.

memberList.get(0)

여기에서 EL 표기법으로 바꾸면 다음과 같다.

- 여기서 기억해야할 것은 EL 표기법을 사용할 때 get을 생략할 수 있다.

${memberList.(0)}

 

여기서 문제가 있다.

memberList.(0)은 문법 자체에 맞지 않는다. 따라서 이 경우에는 배열 표기법을 사용하게 된다.

${memberList[0]}

단계적 접근2. memberList 내 memberVO 의 Id 가져오기

보통 memberList에서 memberVO 안에있는 id를 가져오려면 

memberList에서 인덱스를 주어 memberVO를 접근한 뒤 getter를 통하여 Id를 가져온다.

memberList.get(0).getId()

이것을 EL 표기법으로 변경하면

memberList[0].id

 

더 나아가 보자

보통 memberList는 하나의 memberVO만 갖지않는다.

for문을 돌려서 memberList를 가져오는데 아래와 같이 쓰이게 된다.

memberList[i].id

하지만 이것은 EL 표기법 입장에서 맞지 않는 문법이다.

memberList[0].id 처럼 index에 대한 값이 명확하게 있으면 정상적으로 출력이 된다.

 

memberList[i].id는 EL 문법에 대해서 컴파일 할 때,

컴파일 입장에서는 i에 대한 기준이 없으므로 구분을 할 수 없게된다.

자세한 내용은 아래의 포스팅을 참고한다.

https://ejyoo.tistory.com/216

 

EL표기법과 Java List index 접근하여 출력(결과: 불가능함)

결과 결과만 말하면 EL표기법과 Java의 List index 를 섞어서 사용할 수 없다. 코드 EL 표기법을 사용한 JAVA List 출력 코드는 아래와 같다. <% for(int i = 0 ; i < memberList.size(); i++){ %> ${memberList[i..

ejyoo.tistory.com