|
라이프로그
![]() 사랑하지 않으면 떠나라! ![]() 1일 30분 ![]() 이너게임 ![]() 뉴욕의 프로그래머
|
요즘 많이 뜨고있는 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"); 으로 수정 하면 되더군요.
|
메모장
격언 컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다." - 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 이글루 파인더
|