Egov(전자정부프레임워크) Pagination(페이징)추가하는법

2021. 9. 15. 14:19개인노트

반응형

운영사이트에 특정 페이지마다 페이징이 다른형태로 되기를 원할때가 있다.

확인결과

dispatcher-servlet.xml <<해당 파일 내부에서 bean으로 등록해서 사용중이고 내용은 아래와 같음

 

           <!-- For Pagination Tag -->

<bean class="egovframework.com.cmm.ImagePaginationRenderer" id="imageRenderer"/>

<bean class="egovframework.itgcms.util.UserPaginationRenderer" id="userPagingRenderer"/>

<bean class="egovframework.itgcms.util.ResponsivePaginationRenderer" id="responsivePagingRenderer"/>

<bean class="egovframework.itgcms.util.ResponsivePaginationRendererEng" id="responsivePagingRendererEng"/>



<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager" >

<property name="rendererType">

<map>

<entry key="image" value-ref="imageRenderer"/>

<entry key="user" value-ref="userPagingRenderer"/>

<entry key="indc" value-ref="responsivePagingRenderer"/>

<entry key="indceng" value-ref="responsivePagingRendererEng"/>

</map>

</property>

</bean>

<!-- /For Pagination Tag -->

 

만약 사용한다면 해당 id 호출해주면되고

<ui:pagination paginationInfo="${paginationInfo}" type="indceng" jsFunction="fn_egov_link_page" />

해당 클래스는 아래와 같이 init되어 사용중임

 

public class ResponsivePaginationRendererEng extends AbstractPaginationRenderer implements ServletContextAware {

private ServletContext servletContext;

String type;



public String getType() {

return this.type;

}



public void setType(String type) {

this.type = type;

}



public void initVariables() {

firstPageLabel = "";

previousPageLabel = "<a href=\"javascript:void(0);\" class=\"prev disabled\" onclick=\"{0}({1}); return false;\">&#60; Prev</a>";

currentPageLabel = "<a href=\"javascript:void(0);\" class=\"on disabled\">{0}</a>";

otherPageLabel = "<a href=\"javascript:void(0);\" class=\"disabled\" onclick=\"{0}({1}); return false;\">{2}</a>";

nextPageLabel = "<a href=\"javascript:void(0);\" class=\"next disabled\" onclick=\"{0}({1}); return false;\">Next  &#62;</a>";

lastPageLabel = "";

}



@Override

public void setServletContext(ServletContext servletContext) {

this.servletContext = servletContext;

initVariables();

}

}

 

 

아래는 참고하기 좋은 펌글

 

전자정부표준프레임워크 paging 추가하기

yeon.Biju 2020. 9. 17. 09:43

전자정부표준프레임워크에서 페이징을 추가하려고 한다.

이를테면 관리자와 일반 사용자간의 페이징 디자인이 다른 경우가 해당한다.

(로직추가가 아니고 여러개의 페이징 디자인을 사용하는 경우에 해당한다.)

 

전자정부표준프레임워크의 페이징을 자세히 살펴본적도 없어서.. 페이징 디자인 추가를 위해서 좀 헤맸기에... 그 과정을 중심으로 기술해보고자 한다. 여태 한번도 생각해보지 않고, 그냥 있는대로 사용하기만 했을뿐이었다.

 

1. JSP 파일부터 살펴보자. 

   - 페이징이 항상 아래와 같이 사용이 되고 있는데 type="image" 와 ui:pagination에 대해서 의구심이 있었다.

   - type="image" 는 parameter를 던지는 느낌(또는 함수의 argument)

   - ui:pagination는 커스텀 태그로 보인다.

1
2
3
4
<!-- paging navigation -->
<div class="pagination">
    <ul><ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="fn_egov_select"/></ul>
</div>
Colored by Color Scripter
cs

 

2. 커스텀태그 확인

   - 상단에 보면 아래와 같이 정의되어 있다. 아마도 전자정부표준프레임워크에서 만든 custom tag 라고 생각을 하고  추적을 해보기 시작하였다.

1 <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> cs

   - Ctrl 을 누른 상태로 마우스를 올리니 클릭이 가능해진다. 그래서 파일을 열어본다. 

   - 아래와 같이 custom tag가 정의되어 있다. 

 

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
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">


<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>ui</short-name>
    <uri>http://egovframework.gov/ctl/ui</uri>
    <display-name>UI</display-name>
    <description>UI Tag Library</description>
    
    <tag>
        <name>pagination</name>
        <tag-class>egovframework.rte.ptl.mvc.tags.ui.PaginationTag</tag-class>
        
        <body-content>empty</body-content>
        <description>Pagination Tag</description>
        <attribute>
            <name>paginationInfo</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>type</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>jsFunction</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>
Colored by Color Scripter
cs

 

3. 클래스 확인

   - custom tag에 클래스로 정의된 egovframework.rte.ptl.mvc.tags.ui.PaginationTag 파일을 또 열어본다.

   - 부분적으로 보면 아래와 같은데... ctx.getBean("paginationManager"); 가 눈에 띈다.(소스에 대한 이해는 나중문제로 두자.. 일단은)

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
public int doEndTag() throws JspException {


        try {


            JspWriter out = pageContext.getOut();


            PaginationManager paginationManager;


            // WebApplicationContext id 'paginationManager' 정의된 해당 Manager 찾는다.
            WebApplicationContext ctx = RequestContextUtils.getWebApplicationContext(pageContext.getRequest(), pageContext.getServletContext());


            if (ctx.containsBean("paginationManager")) {
                paginationManager = (PaginationManager) ctx.getBean("paginationManager");
            } else {
                //bean 정의가 없다면 DefaultPaginationManager 사용빈설정이 없으면 기본 적인 페이징 리스트라도 보여주기 위함.
                paginationManager = new DefaultPaginationManager();
            }


            PaginationRenderer paginationRenderer = paginationManager.getRendererType(type);


            String contents = paginationRenderer.renderPagination(paginationInfo, jsFunction);


            out.println(contents);


            return EVAL_PAGE;


        } catch (IOException e) {
            throw new JspException();
        }
    }
Colored by Color Scripter
cs

 

4. 설정파일 확인(egov-com-servlet.xml)

   - paginationManager 키워드를 이클립스에서 검색해본다. bean으로 지정된 것이 있을 것이라는 추측으로 검색을 하였다.(아마도 bean 등록을 한 xml 파일이 있지 않을까?)

  - egov-com-servlet.xml 파일하나가 검색된다. 이럴 때는 lucky다.

  -  파일의 내용중에 아래와 같은 부분이 눈에 띈다. 

  - 1번에서 type=image 가 대략적으로 해석되는 듯 하다. 

   - type=image 인 파일이 egovframework.com.cmm.ImagePaginationRenderer 클래스와 연관되어 있는 것으로 추측할 수 있겠다. 

1
2
3
4
5
6
7
8
9
10
<!-- For Pagination Tag -->
<bean id="imageRenderer" class="egovframework.com.cmm.ImagePaginationRenderer"/>


<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
    <property name="rendererType">
        <map>
            <entry key="image" value-ref="imageRenderer"/>
        </map>
    </property>
</bean>
Colored by Color Scripter
cs

 

5. egovframework.com.cmm.ImagePaginationRenderer 클래스 파일을 열어본다. 

   - 아래와 같은 코드가 들어있다. 잘 찾은 것 같다.

   - 아래 코드가 맞는지 살짝만 바꿔서 테스트를 해봤다. 

1
2
3
4
5
6
7
8
9
10
11
12
public void initVariables(){


    firstPageLabel    = "<li class=\"first\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"> 페이지</a></li>";
    previousPageLabel = "<li class=\"prev\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">이전 페이지</a></li>";
    
    currentPageLabel  = "<li class=\"current\"><a onClick=\"return false;\">{0}</a></li>";
    otherPageLabel    = "<li><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">{2}</a></li>";
    
    nextPageLabel    = "<li class=\"next\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \">다음 페이지</a></li>";
    lastPageLabel    = "<li class=\"last\"><a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \"> 페이지</a></li>";


}
Colored by Color Scripter
cs

6. egov-com-servlet.xml 파일을 수정한다.

   - 대충 느낌을 보니 <bean id="imageRenderer" class="egovframework.com.cmm.ImagePaginationRenderer"/> 와 비슷하게 하나 추가하고  <entry key="image" value-ref="imageRenderer"/> 와 비슷하게 추가하면 되지 않을까? 하는 생각이 든다. 

   - 아래와 같이 추가하였다.(관리자 전용으로 만드는 것이라 아래와 같이 추가하였다.)

   - 추가는 했는데 문제가 있다. egovframework.com.cmm.AdminImagePaginationRenderer 라는 클래스가 아직까진 존재하지 않으니 말이다. 따라서 만들어주면 된다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- For Pagination Tag -->
<bean id="imageRenderer" class="egovframework.com.cmm.ImagePaginationRenderer"/>


<!-- 페이징 추가 -->
<bean id="adminImageRenderer" class="egovframework.com.cmm.AdminImagePaginationRenderer"/>


<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
    <property name="rendererType">
        <map>
            <entry key="image" value-ref="imageRenderer"/>
            <entry key="adminImage" value-ref="adminImageRenderer"/>
        </map>
    </property>
</bean>
Colored by Color Scripter
cs

7. egovframework.com.cmm.AdminImagePaginationRenderer 클래스 파일 생성

   - egovframework.com.cmm.ImagePaginationRenderer 클래스 파일을 카피하여서 AdminImagePaginationRenderer 클래스 파일을 생성하여서 수정을 해주니 잘 동작한다. (몇번의 수정을 해줬지만)

 

 

8. JSP에 적용

   - 아래와 같이 적용한다.  type="adminImage" 만 변경하니 정상적으로 작동한다. css는 꽤나 수정해줬지만 말이다. 

1 <ui:pagination paginationInfo="${paginationInfo}" type="adminImage" jsFunction="fn_egov_select"/> cs

 

 

전자정부표준프레임워크 위키문서에는 더 많은 내용이 있다.

 

www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:view:paginationtag

 

출처: <https://web-obj.tistory.com/460>

반응형