하늘바라기 (skywatch)의 프로그래밍 에세이 블로그
by 하늘바라기
라이프로그
사랑하지 않으면 떠나라!
사랑하지 않으면 떠나라!

1일 30분
1일 30분

이너게임
이너게임

뉴욕의 프로그래머
뉴욕의 프로그래머


rss

skin by jiinny

[프로그램밍] AjaxTags 프로젝트
요즘 많이 뜨고있는 Ajax와 관련되서 AjaxTags 프로젝트가 소스포지에 있어서 한번 확인해 봤습니다.
프로젝트 웹사이트는 AjaxProject in SourceForge에서 확인해 보면 됩니다. 간단히 어떤 것인지 확인하기 위해서는 라이브러리 예제 데모 사이트에서 확인해 보면 됩니다.

쩝... 그리고 단지 확인만 하는 것으로는 조금... 그래서 한번 테스트를 해 봤습니다. 다운로드를 받아서 톰캣에 올리는 순간... 수없이 쏟아져 나오는 에러 메시지... ㅡㅡ;;; 확인해 보니까... 예제는 Servlet 2.4 기준이랍니다. (저는 기본적으로 Servlet 2.3을 사용하고 있습니다.) 그래서 Jakarta Tomcat 5.x 버전을 다운 받고 (처음에 깜박하고 5.5 버전대를 다운 받았다가 J2SE5.0을 깔고 있지 않다는 것을 알고 다시 5.0 버전대를 ㅡㅡ;;; 설치했습니다.)
흠... 일단은 그대로 잘돌아갑니다. 쩝... 그렇지만 XML을 만들어내는 것을 서블릿을 사용하더군요. 허허... 그냥 볼 수 없어서 JSP로 포팅해 봤습니다. 머 의외로 간단합니다. 그냥 JSP에서 XML을 뿌려 주면 되니까요. 아니면 단순히 XML 파일을 하나 올려서 테스트 해봐도 됩니다.
여러 예제 중에서 dropdown 을 한번 포팅해 봤습니다. 그리고 소스는 아래와 같습니다.

=================================================================
<%@page import="java.util.*, org.ajaxtags.demo.*" %><%

response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");

String make = request.getParameter("make");

CarService service = new CarService();
List list = service.getModelsByMake(make);
%><?xml version="1.0" encoding="UTF-8"?>
<list><%
for (Iterator iter = list.iterator(); iter.hasNext(); )
{
Car car = (Car)iter.next();
%><item value="<%=car.getModel()%>"><%=car.getModel()%></item><%
}
%></list>
=================================================================
주의 할 점으로는 전 불여우에서 테스트를 했는데 처음의 xml 태그를 넣기 전에 공백이 있으면 XML로 인식을 못하더군요. ㅡㅡ;;; 그리고 Ajax의 자바스크립트 엔진에서의 버그로 봐야 할지 기능구현을 다 안한 것으로 봐야 할지 좀 애매하긴 한 부분이 있습니다. 완전한 XML 파싱으로 처리하는 것 같지는 않더군요. 흠... 다시 생각해 보니까 버그나 기능구현이 미흡하다 보다는 일종의 스펙이라고 할수 있겠죠... 쩝... 무슨말인고 하니... 소스를 보면서 얘기를 하죠.

ajaxcode.js 에서 약 500 라인 정도에 보면
function handlerFunc(xmlDoc)
{
var root = xmlDoc.documentElement;
targetField.options.length = 0;
if (root != null) {
targetField.disabled = false;
var items = root.childNodes;
for (var i=0; i {
// (1)
targetField.options[i] = new Option(items[i].firstChild.nodeValue, items[i].getAttribute("value"));
}

targetField.focus();
postFunc();
}
}

와 같이 함수가 있고 이 함수가 dropdown에서 사용되는 함수입니다. 여기서 (1) 번 부분의 소스를 보면
바로 item.firstChild.nodeValue 와 같이 바로 호출이 됩니다. 이 부분이 약간의 문제입니다.
제 경우에는 JSP에서 XML을 다음과 같이 만들도록 구현을 했었습니다,

<?xml version="1.0"?>
<list>

<item value="Escape">
Escape
</item>

</list>

이때 위의 소스에서는 list element의 첫번째 child 부터 차례대로 방문을 하게 되죠. 그리고 첫번째 element의 firstChild를 호출하고요. 여기서 문제가 있습니다. 제가 만든 소스에서는 보다시피 list element의 첫번째 Child Node는 item element Node가 아닌 TEXT_NODE 가 됩니다. 따라서 TEXT_NODE의 firstChild는 존재하지 않기 때문에 구동이 되지 않아 버립니다. 그래서 Ajax Example의 Servlet에서는 다음과 같이 XML을 만들더군요.

<?xml version="1.0"?><list><item value="Escape">Escape</item></list>

쩝... 결국 XML 브라우저 (불여우에서도 볼 수 있습니다.)에서 확인할 때는 제가 만든 JSP의 결과 XML과 AjaxTags의 예제 서블릿의 결과 XML이나 동일하게 보이지만... 실제는 위와 같이 하늘과 땅 만큼의 차이가 생기게 됩니다.

흠... AjaxTags의 Core 스크립트 엔진이 어디서 만들어지는 것인지는 모르겠지만 XPath를 사용하는 것이 보다 방어적인 프로그래밍이 될 것 같다는 생각입니다.

덧 1.
쩝... 잠시 다시 테스트를 해보니... 앞의 사항들이 IE 에서는 문제가 안생기는 사항이네요. 그런데 FF 에서는 문제가 생깁니다. 후~~~ 아무래도 이번에도 IE의 느슨한 DOM 파서 때문에 IE에서는 문제가 없는 듯이 보인다는 생각입니다. 원래 IE 쪽에서는 엄격한 validation 보다는 느슨하게 처리를 해서 실제 HTML이 조금 깨져도 어느정도 알아서 보정해서 보여주죠...


덧 2.
앞에서의 문제를 해결하려면 위의 코드 부분에서
var items = root.childNodes;
부분을
var items = root.getElementByTagName("item");
으로 수정 하면 되더군요.


by 하늘바라기 | 2005/08/17 11:19 | 프로그래밍 | 트랙백 | 핑백(1) | 덧글(1)
트랙백 주소 : http://skywatch.egloos.com/tb/1652939
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at 하늘바라기의 개발자의 일상 :.. at 2008/01/09 09:55

... 특별한 것은 없어서 네이버에 검색을 해서 조금 더 자세한 정보를 얻고자 한 결과....블로그 검색 4번째 결과로 내가 이전에 포스팅 했던 글... http://skywatch.egloos.com/1652939 이 검색 결과로 나오는 것을 보았다. 쩝... 내 머리속에서는 기억에도 없었는데... ㅡㅡa정말 기록이라는 것이 기억을 우선하는 것일 지 ... more

Commented by 미미야 at 2005/11/05 01:37

안녕하세요. 혹시 AJAX에 관하여 많이 아시나요? 질문이 있는데... 제 서버에서 다른 서버에 있는 도메인으로 그 페이지에 접속하여 자바스크립트를 사용하여 특정한 컨텐츠를 불러 드리려고 합니다. 그게 가능한가요? 같은 서버에서는 이게 가능한데.. 혹시 답을 아시면 mimiyakim@gmail.com 으로 답 부탁드립니다. 감사합니다!

※ 로그인 사용자만 덧글을 남길 수 있습니다.
◀ 이전 페이지 다음 페이지 ▶


메모장
격언

컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다."
- Martin Fowler

개인 링크

하늘바라기의 롤링리스트
윤준영 싸이


추천 링크

하늘바라기의 일상 얘기
자바서비스넷
OK! JSP
월간 마이크로 소프트웨어
Rhea's Homepage

카테고리
전체
자기계발
사는얘기
자바
프로그래밍
프로그래밍 팁
프로그래밍 QnA
프로그램 일반
컴퓨터 이야기
책이야기
애니/만화이야기
판타지/무협
기타
기상 포스팅
아이디어
Spring Framework
즐겨찾기
미분류

이전블로그
2008년 04월
2008년 03월
2008년 01월
more...

최근 등록된 덧글
아침 일찍일어나 회사에..
by msyoon at 03/06
잘보고 갑니다~~
by 재영 at 10/09
sql explorer다운받아..
by 신미저 at 08/22
재미있네요 ㅋㅋㅋ
by 곰곰이 at 12/28
안녕하세요. 혹시 AJ..
by 미미야 at 11/05

최근 등록된 트랙백
프로젝트는 왜 실패하는가?
by 이영곤의 작은 공간 큰 세상
Easy Mock 2 시작하기
by Younghoe.Info
인터페이스에 대한 생..
by Younghoe.Info
200개의 작품, 내가 본 ..
by 月の砂漠をサバサバ
[리뷰] 무한의 리바..
by ▒月狼牙▒ Break-Age

이글루 파인더