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;\">< 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 ></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
'개인노트' 카테고리의 다른 글
윈도우 파일탐색기 탭기능 추가방법(Mac처럼사용) (0) | 2021.09.15 |
---|---|
이클립스 주석 자동완성을 잘 사용하자! (0) | 2021.09.15 |
Http통신 구방식 (0) | 2021.09.15 |
Hosts파일 수정 편하게 하기 (0) | 2021.09.15 |
서버에 파일을 반영할때! (0) | 2021.09.14 |