개발/BackEnd

내가 보려고 쓰는 페이징유틸(PagingUtil)

투리비 2023. 12. 27. 10:07

내가보려고 쓰는 페이징 유틸이다. 기존소스를 일부 수정 이다.

화면부분에서 페이지수와 리스트갯수 지정
컨트롤러에서 PagingUtil을 호출한다.

public class PagingUtil {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(PagingUtil.class.getName());
	
	public static void setPagingLimitValues(Map<String, Object> data, int pRowCount) {
        // 현제 페이지수
        int cPage = Integer.parseInt(nvl(data.get("cPage"), "1"));
        // 한페이지에 보여질 데이터 수
        int rowCount = 10;
        if(pRowCount > 0){
            rowCount = pRowCount;
        } else{
            rowCount = Integer.parseInt("10");
        }

        if (cPage < 1) cPage = 1;
        data.put("cPage", cPage);
        data.put("offset", (cPage - 1) * rowCount);
        data.put("rowCount", rowCount);

	}
    
	public static void setPagingLimitValue(Map<String, Object> data) {
		
	    if (data.containsKey("rowCount") && data.get("rowCount") != null) {
	        String rowCountString = data.get("rowCount").toString().trim();
	        if (!rowCountString.isEmpty()) {
	            try {
	                int rowCount = Integer.parseInt(rowCountString);
	                setPagingLimitValues(data, rowCount);
	            } catch (NumberFormatException e) {
	                e.printStackTrace();
	                setPagingLimitValues(data, 10); // Set a default value, or handle it in another way
	            }
	        } else {
	            setPagingLimitValues(data, 10); // Set a default value, or handle it in another way
	        }
	    } else {
	        setPagingLimitValues(data, 10); // Set a default value, or handle it in another way
	    }
	}
	
	public static String nvl(Object obj, String nullVal) {
        if(obj == null)
            return nullVal;
        if(isEmpty(obj)) {
            return nullVal;
        } else {
            if(obj instanceof java.math.BigDecimal) {
                double d = ((java.math.BigDecimal)obj).doubleValue();
                return String.valueOf(d);
            }
            else if(obj instanceof Integer) {
                int i = ((Integer)obj).intValue();
                return String.valueOf(i);
            }
            else if(obj instanceof Long) {
                long l = ((Long)obj).longValue();
                return String.valueOf(l);
            }
            return (String)obj;
        }
    }
	
	 public static boolean isEmpty(Object obj) {
	        if(obj == null)
	            return true;

	        String val = "";

	        if(obj instanceof java.math.BigDecimal) {
	            double d = ((java.math.BigDecimal)obj).doubleValue();
	            val = String.valueOf(d);
	        } else if(obj instanceof Integer) {
	            int i = ((Integer)obj).intValue();
	            val = String.valueOf(i);
	        } else if(obj instanceof java.lang.Double) {
	            double i = ((Double)obj).doubleValue();
	            val = String.valueOf(i);
	        }  else if(obj instanceof java.lang.Long) {
	            double i = ((Long)obj).longValue();
	            val = String.valueOf(i);
	        } else {
	            val = (String)obj;
	        }
	        if(val.equals(""))
	            return true;
	        else
	            return false;
	    }
}

화면부분에서 별도로 페이지수와 리스트 갯수가 지정되지 않았을시,

컨트롤러 부분에 페이징 유틸대신 시작값과 끝값을 입력

리스트 쿼리 호출부분 하단에

유틸에서 설정한 값으로 리미트 시작과 끝값을 입력