Whiteship's Note


DisplayTag에서 팝업 링크 달기

View/JSP : 2008.10.13 12:13


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 배포합니다. 이번 주를 목표로 합니다. 아자 아자 파이팅!!!!
top


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

View/JSP : 2008.09.30 17:02


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

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

.hidden {
    display: none;
}

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

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

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


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

View/JSP : 2008.09.30 10:24


사용자 삽입 이미지

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

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

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

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

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

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

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

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

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

updated today 6:00


top


DisplayTag 데코레이터 사용하기

모하니?/Coding : 2008.09.29 15:47


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

어떻게 만드는지에 대한 설명은 없고 사용법만 나와있습니다. 에잉~ 어쩔 수 없이 Javadoc을 살펴봤습니다. 뭔가 인터페이스를 만들어 놓고 그걸 구현하게 해 뒀겠지.. 싶어서 찾아봤습니다.

올커니.. 너였구나. ColumnDecorator. 에엥; 왠걸 Deprecated 됐습니다. DisplaytagColumnDecorator 1.1부터는 이 인터페이스를 사용하라네요. 자세한건 귀찮아서 패~스.

구현해야 할 메소드는 딱 하나.

    public Object decorate(Object object, PageContext context, MediaTypeEnum typeEnum)
            throws DecoratorException {
    }

object로 넘어온 값을 원하는 형태로 저 안에서 변형시킨 다음에 넘겨주면 됩니다. 저는 인터페이스를 타입 구현체에서 구현하게 했습니다.

public class SexType extends AbstractType implements DisplaytagColumnDecorator {

    public static final int MALE = 10;
    public static final int FEMALE = 20;
   
    public SexType() {
        super(Arrays.asList(
            new Pair(MALE, "남성"),
            new Pair(FEMALE, "여성")));
    }
   
    private static SexType sexType = new SexType();
   
    public static SexType getInstance(){
        return sexType;
    }

    @Override
    public Object decorate(Object object, PageContext context, MediaTypeEnum typeEnum)
            throws DecoratorException {
        return this.decode((Integer)object);
    }
   
}

이렇게 말이죠. 그럼 뷰에서는 저 데코레이터 인터페이스를 구현한 클래스 풀 패키지 경로를 포함한 이름으로 설정해주면.. 됩니다.

<d:table name="list">
    <d:column property="name" />
    <d:column property="loginId" />
    <d:column property="sex" decorator="org.opensprout.sample.model.enumeration.SexType" />
    <d:column property="location" />
    <d:column property="birthday" />
    <d:column property="hobbies" />
</d:table>

흠.. 고민이 있는데, 저런 데코레이터를 지금처럼 특정 타입에 대한 데코레이터니까, 타입 클래스가 구현하는게 좋을지 아니면 별도의 클래스로 분리하는게 좋을지.. 잘 모르겠습니다. 또 고민이 있는데, 저 인터페이스가 jsp 인터페이스에 종속되어 있어서(PageContext), SexType이라는 클래스가 디스플레이 태그 API와 JSP API의 침략을 당한다는 것입니다. 이 부분이 상당히 껄끄러운데.. 어쩜 좋을지.. 고민이 됩니다.

어차피 decode()라는 메소드가 AbstractType에 존재한다는 건, 디코딩 역할을 하겠다는 것이고, 뷰에서도 디코딩 역할을 이 녀석이 책임지는 것이 그리 나쁘지 않을 것 같다는 판단하에 타입 클래스가 구현하게 했습니다. 훔~

아니면..

저렇게 데코레이터를 사용하지 않고 도메인 클래스에 getSexDecode()라는 메소드를 추가하고, 뷰에서는 sex가 아니라, property="sexDecode" 라고 참조하는 방법도 있습니다.

단, 이 방법은 도메인 클래스의 역할이 역시 좀 이상해 집니다. 뷰에서 어떤 값을 보여주기 위해 디코딩하는 일이 도메인 클래스에 들어있는게, 그리 아름다워 보이지가 않아서 말이죠. 하지만, 이 방법을 쓰면 디스플레이 태그 API가 침범하지도 않고, 따라서 JSP API의 침범도 없습니다.

갈등이네요. (-- ) ( --) 어찌하면 좋을꼬...
top


DisplayTag 링크 기능



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

<display:column property="name" title="이름" href="detail.do" paramId="id" paramProperty="id" sortable="true" />
이런식으로 지정해 주면 detail.do 로 링크가 생기며 이 링크로 객체의 id를 id라는 이름으로 넘겨 줍니다.

이것을 받아서 member 한명에 대한 정보를 뿌리는 controller를 만듭니다.

more..

id로 넘어온 id를 받은 뒤 그것을 가지고 member 객체를 가져오고 다시 member 객체를 detail이라는 view와 함꼐 ModelAndView 객체에 담아서 리턴합니다. 그럼 viewResolver에 의해서 detail.jsp를 찾아가게 될 것입니다.

more..


JSTL을 사용하기 위해 taglib을 지정해 주고 이 페이지에 member객체가 넘어 왔을 테니깐 "${member.name}" 이런식으로 사용해주면 됩니다.

사용자 삽입 이미지

결과는..
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top


DisplayTag과 SpringMVC



SpringMVC의 컨트롤러에서 원하는 페이지 이름(여기서는 index)으로 memberList 객체를 memberList라는 이름으로 전해 줬습니다.

more..

그리고 .jsp로 가도록 View Reslover를 등록 해뒀기 때문에 index -> index.jsp에 membeList객체를 들고 찾아갑니다. 그래서 index.jsp에서는 다음 처럼 dispalyTag에 바로 이 memberList 라는 이름을 사용했더니 어젯밤에 잠들기 전에 본것과 같은 화면이 출력됐습니다.

more..

위 코드는 컬럼명을 원하는 이름으로 주고(title), 페이징을 하고(pagesize), 컬럼별로 정렬이 가능하도록(sortable) 했습니다. 아. 그리고 exel, pdf, cvs(?), rtf(?) 형식의 파일로 데이타를 추출해 낼 수 있도록 했습니다.(export=true)
사용자 삽입 이미지
이런 화면이 보입니다. 원하는 대로 된 것 같지만... 페이지 번호를 눌러보고 메뉴별로 눌러서 정렬을 해보려고 하면 다음과 같은 에러를 만나게 됩니다.
사용자 삽입 이미지
=> page 번호 클릭 했을 때 발생하는 에러

사용자 삽입 이미지
=> 컬럼이름을 눌러서 정렬하고 싶었는데 발생한 현상

다음과 같이 수정을 하면 원하는 대로 동작합니다.

more..

추가 or 수정한 부분을 빨간표시를 했습니다.

'Spring > 주소록 만들기' 카테고리의 다른 글

Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
top


DisplayTag 배끼기



DisplayTag 예제에 있는 css와 img파일을 가지고 마치 제것인양 써봤습니다.
사용자 삽입 이미지
이전에 jstl을 사용해서 table을 출력 했던 화면을 DisplayTag를 사용하도록 바꾸려고 생각했는데예상 한 것 보다 시간이 오래 걸렸습니다. 그래도 위처럼 이쁘장한 화면으로 베낄 수 있었다는 것에 만족하며 잠들어야 겠습니다.

원래의 화면과 비교를 해보시면... 저의 만족감에 공감하실 수 있을지도...
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
top


DisplayTag1.1 예제 보기

Hibernate/study : 2007.01.30 22:40


1. 이 곳에서 displaytag1.1-bin 압축 파일을 다운로드 하고 압축을 풀면 아래에 있는 war파일이 보입니다.
2. 이클립스를 실행하고 패키지들이 있는 곳에서 빈곳을 오른쪽 마우스를 클릭해서 import를 클릭합니다.
사용자 삽입 이미지
3. import할 유형에서 war파일을 선택합니다.
사용자 삽입 이미지

4. 불러올 war파일의 경로를 찾아 줍니다.
사용자 삽입 이미지

5. Next를 클릭하면 아래와 같은 화면이 뜨는데요. 아무것도 선택하지 마시고 그냥 finish를 합니다.
사용자 삽입 이미지

6. 생성된 프로젝트를 우클릭 하시고 Run As -> Run on Server를 하면 예제들을 볼 수 있습니다.

'Hibernate > study' 카테고리의 다른 글

The problem of identity  (0) 2007.02.16
The problem of subtypes  (0) 2007.02.14
The problem of graularity  (0) 2007.02.14
Custom Tag 만들기  (0) 2007.02.07
책을 샀습니다.  (0) 2007.02.04
DisplayTag1.1 예제 보기  (0) 2007.01.30
DisplayTag 써보기  (2) 2007.01.30
Criteria에서 Join하기  (0) 2007.01.29
숙제 2  (0) 2007.01.26
HibernateTemplate  (0) 2007.01.26
HQL과 @Entity에 있는 name 속성의 관계  (0) 2007.01.24
top


DisplayTag 써보기

Hibernate/study : 2007.01.30 19:04


참조 :
http://displaytag.sourceforge.net/11/
http://blog.naver.com/jdkim528?Redirect=Log&logNo=140011759837

DispalyTag의 기능들을 사용해 보기 위한 기본 환경 세팅은 두번째 참조 링크에 있는 소스를 이용했습니다.

1. 기본적인 테이블 출력 <display:table name="members" />

<%
    request.setAttribute( "members", new MemberManager().getMembers(100) );
%>

<display:table name="members" />

사용자 삽입 이미지

2. 컬럼 이름을 명시적으로 주고 싶을 때는 <display:column property="멤버변수" title="Alias" />

<display:table name="members">
    <display:column property="name" title="이름" />
    <display:column property="email" title="이메일" />
</display:table>

사용자 삽입 이미지

3. 페이징 처리를 하고 싶을 때는 <display:table name="members" pagesize="10">

<display:table name="members" pagesize="10">
    <display:column property="name" title="이름" />
    <display:column property="email" title="이메일" />
</display:table>

사용자 삽입 이미지

4. 컬럼 별로 Soring이 가능하도록 설정 <display:column sortable="true">

<display:table name="members" pagesize="10">
    <display:column property="name" title="이름" sortable="true" />
    <display:column property="email" title="이메일" />
</display:table>

사용자 삽입 이미지

이밖에도 여러 기능을 할 수 있습니다.

'Hibernate > study' 카테고리의 다른 글

The problem of subtypes  (0) 2007.02.14
The problem of graularity  (0) 2007.02.14
Custom Tag 만들기  (0) 2007.02.07
책을 샀습니다.  (0) 2007.02.04
DisplayTag1.1 예제 보기  (0) 2007.01.30
DisplayTag 써보기  (2) 2007.01.30
Criteria에서 Join하기  (0) 2007.01.29
숙제 2  (0) 2007.01.26
HibernateTemplate  (0) 2007.01.26
HQL과 @Entity에 있는 name 속성의 관계  (0) 2007.01.24
Fluent Interface  (2) 2007.01.24
top