태그 파일에서 객체 노출시키기

태그 파일에 어떤 객체를 전달하는게 아니라, 그 반대로 태그 파일에서 어떤 객체를 외부로 노출 시킬 수 있습니다. 태그 파일을 사용하고 있는 쪽에서 태그 파일이 가지고 있는 어떤 값에 접근하고자 할 때 유용하게 사용할 수 있겠습니다. jspContext를 사용하여 원하는 객체를 원하는 이름으로 저장해두면 됩니다.

상위 태그 파일

gridpage.tag

<%@ variable name-given=”startNum” %>

<%
jspContext.setAttribute(“startNum”, count);
%>

JSP 파일

grid.jsp

<o:gridpage>
   ${startNum}
</o:gridpage>

DisplayTag에서 팝업 링크 달기

DisplayTag를 계속해서 사용해보니, 한계점들이 들어납니다. 역시 직접 사용해서 뭔가 만들어보기 전까진 모르는건가 봅니다. 암튼, 찾아보니 어떻게든 방법은 있길래 적용했습니다.

    <d:column title=”No”>
        <a href=”javascript:sendToUpdate(<c:out value=”${maingrid.id}” />)”>
            <%out.print(count++);%>
        </a>
    </d:column>

거의뭐.. displaytag가 해주는 일은 없습니다. 그냥 자바스크립트를 이용해서 팝업창 띄우기라고 글 제목을 바꿔야할지도 몰겠습니다.

<script type=”text/javascript”>
function sendToUpdate(selectedId) {
    popup(“update.do?id=” + selectedId + “&gridid=maingrid”, “maingridpopup”, 500, 600, “yes”, “yes”);
}

이제, 그리드 완성입니다. 태그 파일로 다듬고, 태그 파일 서술자 만들어서 url로 태그 파일 참조해서 사용할 수 있는지만 확인하면 OSAF 배포합니다. 이번 주를 목표로 합니다. 아자 아자 파이팅!!!!

DisplayTag 체크 박스 컬럼 추가하기

참조: http://displaytag.sourceforge.net/11/tut_implicitobjects.html

<d:table name=”list” class=”maingrid” id=”maingrid”>
    <d:column><input type=”checkbox” name=”selectedIds” value=”${maingrid.id}“></d:column>

저렇게 table에 id를 주면, implicit 객체에 접근할 수 있습니다. 특정 속성에 접근할 수 있도 있고, 줄 번호를 출력하고 싶을 때 사용할 수 있습니다. 위의 경우 ${maingrid_rawNum} 이라고 하면 줄번호를 출력합니다. 저는 줄번호를 DispalyTag가 아니라 서비스에 첫 번째 줄 번호를 가져와서 차차 찍어주기 때문에, 저 속성은 사용하지 않았습니다. 대신에 id값을 가지고 있는 체크박스를 표현할 때 사용했습니다.

이젠 자바스크립트로 체크된 값들을 가져오는 일이 남았군요.

DisplayTag 히든 컬럼(hidden column) 추가하기

캬오.. 간단하지 않네요. media 속성 값중에 “none”이라는 값을 지원해주면 좋을텐데, 이 값은 지원하지 않습니다. 이슈 트래커에 올리면 반영해주려나.. 흠..

방법은.. 일단 CSS에 hidden이라는 클래스 하나를 추가합니다.

.hidden {
    display: none;
}

그리고 컬럼의 class와 headerClass의 값을 hidden으로 설정해줍니다.

    <d:column property=”id” class=”hidden” headerClass=”hidden” />

끝~ 나중에 OSAF 태그 파일로 감싸서 좀 더 간단하게 이 기능을 제공할 수 있겠습니다. isHidden 이라는 속서을 추가해서 말이죠. 간단하게~ 명시적으로~

그리드 태그 파일 으윽.. 머리야~

사용자 삽입 이미지
현재 그리드에 스타일 적용과 데코레이터 사용법까지 확인을 했고, 뭘 해야 할지 잠시 정리해 봤습니다. 곰곰히..

1. 페이지 네비게이션 바 추가.(완료)
-> displaytag가 제공하는 네비게이션바도 있지만, 그건 이미 많은 양의 데이터를 세션에 집어넣고 그 중에서 페이징처리를 하는거기 때문에 별로입니다. 제대로 페이징을 하려면 서비스 단에서 제공하는 만큼의 데이터가 한 페이지 분량이 되고, 페이징 로직도 서비스단에서 제공하는 걸 이용해야 합니다.

2. id값을 히든 컬럼으로 추가.(완료)
-> 한 Row가 하나의 객체 정보를 보여주고 있고 그 중에 선택을 해서 삭제/수정 작업을 하려면 id를 물고 있어야합니다. 따라서 id 값은 테이블에 안 보이는 컬럼으로 추가되어 있어야합니다.

3. 순번 표시(완료)
-> id가 아닌, 컬럼 줄 수를 표시해야 합니다. 500개의 데이터 중에 해당 줄이 몇 번째 데이터에 해당하는지, 기본적으로 이 순서로 정렬해서 보여줄 필요가 있겠죠. 이 기능도 역시 서비스 단과 맞물려서 동작해야겠습니다. displaytag에서도 뭔가 제공해주겠지만, 그건 저 한 페이지 내용에 대한 순번일 뿐, 전체 데이터에 대한 순번은 서비스 단이 알고 있을테니 말이죠.

4. 정렬 기능(에러)
-> 각 컬럼 헤더에 정렬 단추를 달고, 해당 단추를 눌러서 정렬 할 수 있는 기능을 제공해야 합니다. 이 기능은 displaytag가 제공하기 때문에, 설정만 추가하면 됩니다.

5. 링크 기능
-> 어떤 줄을 더블클릭하면, 바로 수정 화면으로 이동하도록 설정하고 싶습니다. 이 기능은 displaytag가 제공하는 링크 기능을 이용하면 간단하게 될 듯 합니다.

6. 컬럼 데이터 포맷
-> 금액이나 날짜 데이터의 경우 포맷을 설정할 수 있는 기능을 displaytag가 제공합니다. 그 패턴을 좀 익혀서 정리해둬야 겠습니다.

7. 체크 박스
-> 그리드 맨 왼쪽에 체크 박스 컬럼을 만들어서 다중 선택을 지원합니다. 다중 선택으로 해당 객체의 id 값들의 배열을 특정 요청 매개변수로 넘겨줄 수 있다면, 그 뒤엔 여러가지 일들을 할 수 있겠죠.

이밖에도 그리드 편집/새로운 줄 추가 등 여러 기능이 있을 수 있겠지만.. 일단 저 위의 것들부터도 그닥 만만해 보이지 않습니다. 저것만 끝내면 OSAF 공개인데… ㅠ.ㅠ 파이팅 하자 파이팅 해..

updated today 6:00