출처 : http://sgjin4u.tistory.com/30

사용 jar :  netscape.jar 


보통 애플릿에서 JSObject를 이용해서 자바스크립트 함수를 호출할 때 다음과 같이 사용한다

JSObject jsObject = JSObject.getWindow(this);
jsObject.call("myFunc", new Object[] {"aa", "bb", "cc", dd"});



즉, 자바스크립트의 myFunc(a, b, c, d) 함수를 실행하는 것이다.

만일 애플릿에서 배열형태를 자바스크립트로 전달하고 싶다면 어떻게 해야할까?

처음 생각해 본 것은 구분자를 두는 것이었다.
"1|2|3|4|5" 를 인자로 넘긴다면 자바스크립트에서 받아서 '|' 를 통해 구분하게 되면 결국 배열을 보낸 것과 같은 효과로 볼수 있는 것이다.

그러나 형식이 있는 값을 보낸다면? 다시말해 name, age, addr 등을 보내고 싶다면 어떻게 해야할까...
이 역시 구분자를 둬서 보낼수 있다

다음과 같이 보내면 된다
name=A,age=11,addr=ABC|name=B,age=12,addr=abc| ..

위와 같이 보내고.. | 로 구분해서 각 항목을 분할하고  또 ',' 로 구분해서 개별항목을 분할하고 또다시 '='로 구분해서 각 항목명과 항목에 대한 값을 뽑아내면 된다

그러나 !!! 이보다 더 간단한(?) 방법이 있다.
바로 JSON 객체타입을 이용하는 것이다.

어떻게 하냐면... 다음 코드를 보라 !!

StringBuffer jsonBuf = new StringBuffer();
jsonBuf.append("var jsonObj=[");
for(int i = 0; i < 3; i++) {
    jsonBuf.append("{");
    jsonBuf.append("name:\"");
    jsonBuf.append(name[i]);
    jsonBuf.append("\",age:\"");
    jsonBuf.append(age[i]);
    jsonBuf.append("\"");
    jsonBuf.append("}");
    
    if(i < objCount) {
        jsonBuf.append(",");
    }
}
jsonBuf.append("]");

jsObject.eval(jsonBuf);



위의 코드를 수행하면 자바스크립트의 다음 코드를 수행하는 것과 같은 결과를 낳는다

var jsonObj=[
    {name:"J", age:10}
    , {name:"K", age:11}
    , {name:"L", age:12}
];


그럼 위의 jsonObj를 자바스크립트 함수에 던지기만 하면 된다.

jsObject.call("myFunc", new Object[] {"jsonObj"});

위와 같이 쓰면 myFunc("jsonObj"); 라고 호출이 될 것이다.
그럼 myFunc()에서는 jsonObj를 자바스크립트 객체로 변환 시켜주면 된다

function myFunc(obj) {
  var json = eval(obj);
  
  alert(json[0].name); // 결과는 J 라고 찍히겠죠?
}



이거 은근히 많이 써먹을지도 모르겠다 

(추가)
IE에서는 정상동작 되는데.. FF에서는 적용이 되지 않는다.
다시 잘 봐야겠다
var json = eval(obj) 라고 하면... 그냥 위에서 선언된 jsonObj라는 것만 찍힌다
그러나.. alert(jsonObj[0].name) 이라고 하면 제대로 값이 찍힌다.
왜 그럴까? 

'Java' 카테고리의 다른 글

[Java] 정규식 패턴  (0) 2014.07.17
[Java] Java Doc 사용법  (0) 2014.07.14
[Java] Blob Data Text가져오기  (0) 2014.05.21
[Java] 웹페이지 applet 실행  (0) 2014.05.13
[Java] Rapidant Applet 웹 대용량 파일 전송  (0) 2014.05.09

+ Recent posts