작업 중에 에러가 발생 했어요.

JSP 파일 작성 중에

script tag 내부에 jsp를 선언하여 사용하려고 했는데!

두둥! 

  Hello Error !!!

 

분명 잘 사용 했다고 생각 했는데 !!! (응 혼자만 ^^)

 

아무튼 문제의 소스는!

1
2
3
4
5
6
7
<script>
function formChk(form){
    <%if("write".equals(mode)){%>
    if(!form.userPhone.value){alert("연락처를 입력해 주세요."); return false;}
    <%}%>
}
</script>
cs

여기까지 보면 아~무런 문제가 없는데...

 

하지만 다음을 보면! 두둥...

1
2
3
4
5
6
7
8
9
10
<script>
function formChk(form){
    <%if("write".equals(mode)){%>
    if(!form.userPhone.value){alert("연락처를 입력해 주세요."); return false;}
    <%}%>
    <%else if("reply".equals(mode)){%>
    if(!form.tel.value){alert("문의처를 입력해 주세요."); return false;}
    <%}%>
}
</script>
cs

허헣...

너무나 기본적인 실수를 해버렸습니다.

 

스크립틀릿 태그를 나누지 말고, 이어서 작성 했어야 했는데 에러가 났던 것이죠! (응 너만 몰랐어^^)

- 5번째 line과 6번째 line을 나눠서 문제 발생

- 해결 : 6번째 line 5번째로 이동

 

 

해결한 코드는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
<script>
function formChk(form){
    <%if("write".equals(mode)){%>
    if(!form.userPhone.value){alert("연락처를 입력해 주세요."); return false;}
    <%}else if("reply".equals(mode)){%>
    if(!form.tel.value){alert("문의처를 입력해 주세요."); return false;}
    <%}%>
}
</script>
cs

 

이런 간단한 실수를...

 

실제로 수정 후, 페이지 소스보기나 F12 개발자모드로 확인을 해볼 경우 write mode 일때는 4번째 line의 소스코드만 반영되어 있고, reply mode 일때는 6번째 line의 소스코드만 반영이 되는 것을 확인 할 수 있습니다.

 

혹시나(그럴 일은 없으시겠지만요 쥬륵...) 저와 같은 실수를 하시는 분들이 계실까봐!

포스팅을 해봅니다.

 

 

 

 

 

 

* 여담으로 퇴근이 보이지 않아요!

 

 

Spring으로 작업을 진행 하던 중,

java.io.NullPointException !!!!!

아아... System.out.println("Hello Null _._+");

 

Error Log를 확인 했더니

ObjectMapper 에서 Error 가 두둥...

 

언제나처럼 구글링을 통해 알아보던 중,

(즐겨찾기 해놨는데 어디있는지 까먹어서 그러는거 절대 아닙니다 ! ! !)

 

ObjectMapper 클래스의 readValue() 메서드를 사용할 때 json Data를

자동으로 Decode 해주는 문구를 봤던 기억이...

(아니면 ObjectMapper 에서 JsonFactory로 넘겨주고 JsonFactory에서 decode 해주던가...? 까먹었어요... ㅠㅠ)

 

아무튼!

그러한 이유로 Client에서 parameter 값을 하나하나 encode 해주기에는 비효율적이고 번거로워서

parameter로 넘기기 직전! encode 해주는 방식으로 변경해 보니!

 

두둥!

정상적으로 Error 없이 작동하더군요.!

 

parameter로 넘기기 전에!

parameter로 만들기 전에!

다음은 그 예제입니다.

 

// JSONArray에 Data가 있다고 가정하겠습니다.
// JSONArray 변수는 jArrObj 라고 가정합니다.

var param = "test_data=" + encodeURIComponent(JSON.stringify(jArrObj));

 

저렇게 해주니 깔끔하게 잘 되더라구요!

 

encodeURIComponent(); 를 예전에 사용했었는데,

그 때는 jArrObj 에 들어가는 Data들 중 일부만 encodeURIComponent();를 사용해 진행했었고,

해당 메서드가 encode 해준다고만 알고 넘어갔었는데,

이번에 작업을 진행하다 보니 해당 메서드랑 그 외의 메서드들에 대해서 조금 더 자세히 알게되었고,

프로그래밍 로직을 작성하는 것도 아직도 많이 부족하다는 것을 알 수 있는 좋은 경험이 되었습니다.!

 

다음은 구글링을 토대로 확인 할 수 있는 character escape와 관련된 encode 메서드들과 간략한 기능에 대한 설명입니다.

 

메서드 기능
escape() 지금은 사용되지 않는다길래 패스 했습니다...
encodeURI()

:,/,= 등 거의 모든 문자를 encode하는 메서드라고 합니다.

주로 URI를 통째로 encode 할 때 쓴다고 합니다.

(그런 경우가 자주 있나요...? 잘 몰라서요 ㅎㅎ..;;;;;;;;;;;;

염치 없지만 알려주시면 감사하겠습니다!!!!!)

encodeURIComponent()

encodeURI() 보다 적은 수의 문자를 encode 하는 메서드라고 합니다.

encodeURI()에서 적용된 :,/,= 등은 encode가 되지 않는다고 합니다.

 

주로 Parameter 를 encode 할 때 쓴 다고 합니다.

 

네.

구글링 하면 다 나오더라구요.

 

이미 많이 있는 내용이지만 기록하기 위해서 ㅎㅎ....

 

출처는... 죄송해요... 검색하면 너무 많이 나와서 어디서 봤는지 기억조차 나지 않습니다...

(변명... 진심인데... ㅠㅠ 앞으로 까먹지 않을게요 !!!)

+ Recent posts