tab 기능 추가삭제에 대해서 알아볼께요
tab 기능을 쓰려면 jquery-ui 라이브러리가 필요합니다.
1 2 3 4 5 6 7 8 | <link href="<c:url value="/resources/jquery-ui/jquery-ui.css"/>" rel="stylesheet" type="text/css"/> <link href="<c:url value="/resources/jqGrid/css/ui.jqgrid.css"/>" rel="stylesheet" type="text/css"/> <script src="<c:url value="/resources/jqGrid/js/jquery-1.11.0.min.js"/>"></script> <script src="<c:url value="/resources/jquery-ui/jquery-ui.js"/>"></script> <script src="<c:url value="/resources/js/jquery.layout.js"/>"></script> <script src="<c:url value="/resources/jqGrid/js/i18n/grid.locale-en.js"/>"></script> <script src="<c:url value="/resources/jqGrid/js/jquery.jqGrid.min.js"/>"></script> | cs |
저는 추후에 jqgrid를 쓸 계획이라 같이 넣어주었습니다.
jquery-1.11.0 버전을 썼는데 버전마다 조금씩 다르더라구요.. 참고해주세요.
jsp body 부분입니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <div id="doclist"> <h2>트리메뉴</h2> <ul id="documents"> <li><a href="#" id = "1" rel="read" title="This is the content of Document1">탭1</a></li> <li><a href="#" id = "2" rel="readPage2" title="This is the content of Document2">탭2</a></li> <li><a href="#" id = "3" rel="readPage3" title="This is the content of Document3">탭3</a></li> <li><a href="#" id = "4" rel="readPage4" title="This is the content of Document4">탭4</a></li> <li><a href="#" id = "5" rel="readPage5" title="This is the content of Document5">탭5</a></li> </ul> </div> <div id="tabs"> <ul> <li><a href="#tabs-0">intro</a> <span class="ui-icon ui-icon-close" role="presentation">삭제</span></li> </ul> <div id="tabs-0"> <p>탭 구현</p> </div> </div> | cs |
트리메뉴 부분과 탭 부분입니다 탭은 하나만 생성시켜놓았습니다.
이어서 tabs 관련 스크립트입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | <script type="text/javascript"> $(document).ready(function() { // 탭 li 선언 var tabTemplate = "<li><a href='<%="#"%>{href}'><%="#"%>{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>"; // 탭 선언 var tabs = $( "#tabs" ).tabs(); // documents의 a태그들 중 원하는 a태그 클릭 했을때 실행 $("#documents a").click(function() { // 현재 눌린 a 태그 가져오기 var link = $(this); // tabs_id 선언 var tabs_id = "tabs-" + $(link).attr("id"); // find_id 선언 var find_id = $("[id= " + tabs_id + "]").attr("id"); // tab_id 선언 var tab_id = "#" + tabs_id; // a태그에 해당하는 탭이 열려 있을 경우 if(find_id == tabs_id){ // 열려있는 탭으로 이동 tabs.tabs("option","active", id2Index("#tabs",tab_id)); // 아닐경우 }else{ // 탭을 추가 addTab(link); } }); // 선택한 documents a 태그의 해당하는 tab index 찾기 function id2Index(tabsId, srcId){ // index 값 -1로 설정 var index = -1; // i 값 선언, tbH : 해당하는 탭의 a 태그 찾기 var i = 0, tbH = $(tabsId).find("li a"); // tbH 길이 선언 var lntb = tbH.length; // lntb가 0보다 클경우 if(lntb>0){ for(i=0;i<lntb;i++){ o=tbH[i]; if(o.href.search(srcId)>0){ index = i; } } } // index값 리턴 return index; } // 해당 탭 지우기 tabs.on( "click", "span.ui-icon-close", function() { var panelId = $( this ).closest( "li" ).remove().attr( "aria-controls" ); // 해당하는 탭 제거 $( "#" + panelId ).remove(); // 탭 refresh tabs.tabs( "refresh" ); }); // 탭 추가 function addTab(link){ // 탭 라벨 선언 var label = $(link).text(); // id 값을 tabs-? 로 선언 var id = "tabs-" + $(link).attr("id"); // rel : link의 속성 중 rel을 찾는다 (ajax로 탭에 보여줄 내용을 가져올 html의 주소가 들어간다) var rel = $(link).attr("rel"); // li replace var li = $( tabTemplate.replace( /#\{href\}/g, "#" + id ).replace( /#\{label\}/g, label ) ); // tab내용 선언 var tabContentHtml = ""; // ajax 실행 $.ajax({ type : "POST", // controller로 갈 url url : rel, // tabContentHtml이 전역변수이기 떄문에 false값을 준다 async:false, // 받아올 데이터타입은 html dataType : "html", success : function(data){ // tabContentHtml에 넘어온 data값을 준다 결국 jsp 파일을 html형식으로 tabContentHtml이 들어가는 것 tabContentHtml = data; } }); // 탭의 ui-tabs-nav 찾아서 li를 append 시킨다 tabs.find(".ui-tabs-nav").append(li); // 추가된 탭의 내용을 삽입 tabs.append( "<div id='" + id + "'><p>" + tabContentHtml + "</p></div>" ); // 탭 새로고침 tabs.tabs( "refresh" ); // 생성 된 탭으로 바로 가게 한다. tabs.tabs( "option", "active", $("#tab_header").index()); } }); </script> | cs |
주석을 최대한 달아놓았습니다. 이해가 안가시는 분들은 댓글 남겨주세요.
이렇게하면 동적 트리 생성,삭제가 완료됩니다.
java controller 부분입니다.
1 2 3 4 5 6 | @RequestMapping(value = "read", produces = "text/json; charset=UTF-8") public String read(Model model) { return "tab_1"; } | cs |
일단 하나만 예시로 스크립트에서 read가 읽혀오면 tab_1.jsp를 불러와서 tabContentHtml에 넣는 소스입니다.
다음 포스팅은 jqgrid 활용 방법을 소개하겠습니다.
'SPRING' 카테고리의 다른 글
[SPRING] jsp 페이지 및 DB 한글 깨짐 해결방법 (0) | 2016.11.29 |
---|---|
[SPRING] 우편번호 API를 이용한 우편번호 검색기능 구현 (1) | 2016.11.22 |
jquery ui tabs 예제 오류 해결방법 (0) | 2016.11.09 |
spring + jqgrid + json 예제 (0) | 2016.11.08 |
Spring프로젝트 mybatis+oracle 초기 셋팅 (3) | 2016.11.07 |