본문 바로가기
개발/개인

⊙사용자 이름.사원번호검색,상세검색 완료(페이징,알럿창)

by areumtb 2016. 12. 20.

⊙사용자 이름.사원번호검색 완료(페이징,알럿창)

 

완료하였음

 

 

이리저리 수정하다가 정착이된듯

 

 

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
36
37
38
39
40
- userSearch.js
 
function userSearchGrid(DCODE, NAME) {
    //alert("DCODE :" + DCODE + " NAME: " + NAME);
    // 둘중 하나는 undifiend로 넘어옴
    /*var currentPage = 1; //$("#"+gridId).getGridParam('page');
    //currentPage = currentPage+1;
*/    
    
 
    if (DCODE == undefined) {
        $("#list2").jqGrid('setGridParam', {
            url : "/library/userSearchName.do?NAME=" + NAME,
            page:1, //1.ex)7페이지에서 검색시 첫 페이지로 돌아가려 page값을 1로줌
            loadComplete : function() {
 
                 2.
var totalRecords = $('#list2').jqGrid('getGridParam','records');
                 init("list2","paginate",totalRecords,"");
                   
3.
                   if(totalRecords==0){
                       alert("검색된 사용자가 없습니다.");
                   }
                 
            }
        }).trigger("reloadGrid");
 
    } else if (NAME == undefined) {
        $("#list2").jqGrid('setGridParam', {
            url : "/library/userSearchDcode.do?DCODE=" + DCODE,
            page:1,
            loadComplete : function() {
                var totalRecords = $('#list2').jqGrid('getGridParam','records');
                   init("list2","paginate",totalRecords,"");
 
 
                   if(totalRecords==0){
                       alert("검색된 사용자가 없습니다.");
                   }
            }
        }).trigger("reloadGrid");
    }
 
}

cs

  1. 조회 화면에 7페이지에서 사용자 검색시 페이지값이 그대로 넘어감(7페이지로 검색했으니 7페이지로).

    사용자가 검색된 후 페이지부분을 보면

이렇게 7페이지로 넘어간다.

그렇기 때문에 값을 검색할때 page:1로 넘겨주어야 1페이지로 넘어간다.

 

2. 처음엔 페이징분리에대한 값을 주지않았다. 그런데 그리드 페이징이랑 그리드 페이징이 다르다느것을 알게되었고 

그리드 페이징 분리부분을 추가하였다.

 

 

- 그리드 페이징분리 추가 전 (페이징 불일치 (분리 페이징은 처음조회값을 그대로 가지고있음))

 

- 그리드 페이징 추가 후

 

 

3. 검색된 데이터가 없을시 알럿창을 발생시키기위해 

 

 

 

 

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
- controller.java
 
    // 사용자검색
        // -이름
        @RequestMapping(value = "/userSearchName.do", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
        public @ResponseBody
        HashMap<String, Object> userSearchName(
                @RequestParam String NAME,
                @RequestParam(value = "page", required = falseint page,
                @RequestParam(value = "rows", required = falseint rows,
                @RequestParam(value = "sord", required = false, defaultValue = "sort"String sord,
                @RequestParam(value = "sidx", required = falseString sidx) {
            logger.info("사용자검색 - 이름");
             
             int startCount = (page - 1* rows + 1;  
             int endCount = page * rows;  
             
            
            Map<String, Object> map = new HashMap<>();
            map.put("NAME", NAME);
            map.put("sidx", sidx);
            map.put("sord", sord);
            map.put("startCount", startCount);
            map.put("endCount", endCount);
            
            List<Emp_SearchVo> emp = null;
            emp = employeeServiceimp.userSearchName(map);
            
            HashMap<String, Object> resMap = new HashMap<String, Object>();
            
// 1. 원 소스는 int records = emp.size(); but 검색값 없을시 500에러발생
            int records;
            if(emp.size()==0){
                records = 0;
            }else{
                
                records = emp.get(0).getRow_count();
            }
 
2. int형이기때문에 올림처리를 안해줌
            int total = (records/rows)+1;
            
if(records==10){ // records값이 10이면은 rows와 나누면 1로 떨어짐 그러나 한페이지에
total = 1; 보여줄 데이터의수는 10이기 떄문에 페이지는 1이
} 그래서 따로 1로 넣어줌
            
            
            resMap.put("page", page);
            resMap.put("total", total); // 총페이지
            resMap.put("records", records); // 총레코드
         resMap.put("rows", emp);
            
            return resMap;
 
        }
 
        // -사원번호
        @RequestMapping(value = "/userSearchDcode.do", method = RequestMethod.POST)
        public @ResponseBody
        HashMap<String, Object>  userSearchDcode(
                @RequestParam String DCODE,
                @RequestParam(value = "page", required = falseint page,
                @RequestParam(value = "rows", required = falseint rows,
                @RequestParam(value = "sord", required = false, defaultValue = "sort"String sord,
                @RequestParam(value = "sidx", required = falseString sidx) {
 
            logger.info("사용자검색 - 사원번호");
            
            
            
            int startCount = (page - 1* rows + 1;  
            int endCount = page * rows;  
 
            List<Emp_SearchVo> emp = null;
            // 정렬을 하기위해 map에 담음
            Map<String, Object> map = new HashMap<>();
            map.put("DCODE", DCODE);
            map.put("sidx", sidx);
            map.put("sord", sord);
            map.put("startCount", startCount);
            map.put("endCount", endCount);
 
            // emp = employeeServiceimp.userSearchDcode(DCODE);
            emp = employeeServiceimp.userSearchDcode(map);
            
            HashMap<String, Object> resMap = new HashMap<String, Object>();
            
            int records;
            if(emp.size()==0){
                records = 0;
            }else{
                
                records = emp.get(0).getRow_count();
            }
            
            int total = (records/rows)+1;
if(records==10){
total = 1;
}
 
                resMap.put("page", page);
                resMap.put("total", total); // 총페이지
                resMap.put("records", records); // 총레코드
                resMap.put("rows", emp);
            return resMap;
 
        }
cs

 

 

1.  int records = emp.size(); 로 해주면은 emp값(검색된 데이터)이 없을시 리턴받을 데이터가 없기떄문에 ajax에서

500번에러가 발생. 그래서 다른방법으로 records값을 주기로 결정.

 

emp.size()가 0 이면은 (검색된 값이 없을시) records(총 데이터의 수)를 0으로 초기화

0이 아니면 emp list중 처음 배열에서 아래 쿼리로 뽑은 row_count값을 꺼내서 담는다. == >  records = emp.get(0).getRow_count();

 

 

 

2. Math.ceil()을 이용해 올림을 하려 했지만 안에 데이터가 int형이라서 그런지 올림처리되지않고 정수형으로 출력되었다.

   그래서 그냥 +1을 해주기로...  int total = (records/rows)+1;

 

 총 데이터의수가 10 이면은 한 페이지에 뿌려질 데이터의수가 10 그래서 records/rows = 1 그리도 page는 1이면 됨

그러나 위에 int total = (records/rows)+1; 해줬기 때문에 따로 records가 10이면 total=1로 값을 줌

 

 

 

 

 

 

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
36
37
38
39
40
41
42
43
44
45
- EmpSearch-mapper.xml
<select id="userSearchName" resultMap="EmpSearchMapper"    parameterType="map">
 
     SELECT *
    FROM (SELECT ROW_NUMBER () OVER 
    (ORDER BY ${sidx}
        <if test="sord == ('asc')">ASC</if>
        <if test="sord == ('desc')">DESC</if>
        ) AS ROW_NUMBER,
    COUNT (*) OVER () AS row_count,
    E.ENAME,E.NAME,E.DCODE,BIREDAY,
    DE.DESCRIPTION AS DEPARTMENT,
    PO.DESCRIPTION AS POSITION,
    PR.DESCRIPTION AS PRESENT
    FROM CODE_TABLE PO,CODE_TABLE PR, CODE_TABLE DE ,EMPLOYEE E
    WHERE DE.CODE = E.DEPARTMENT AND
    PO.CODE = E.POSITION AND
    PR.CODE = E.PRESENT
    AND NAME like '%'||#{NAME}||'%')
    WHERE ROW_NUMBER BETWEEN  ${startCount} AND ${endCount}
        
    </select>
    
 
<select id="userSearchDcode" resultMap="EmpSearchMapper"
        parameterType="map">
        
    SELECT *
    FROM (SELECT ROW_NUMBER () OVER 
    (ORDER BY ${sidx}
        <if test="sord == ('asc')">ASC</if>
        <if test="sord == ('desc')">DESC</if>
        ) AS ROW_NUMBER,
    COUNT (*) OVER () AS row_count,
    E.ENAME,E.NAME,E.DCODE,BIREDAY,
    DE.DESCRIPTION AS DEPARTMENT,
    PO.DESCRIPTION AS POSITION,
    PR.DESCRIPTION AS PRESENT
    FROM CODE_TABLE PO,CODE_TABLE PR, CODE_TABLE DE ,EMPLOYEE E
    WHERE DE.CODE = E.DEPARTMENT AND
    PO.CODE = E.POSITION AND
    PR.CODE = E.PRESENT
    AND DCODE like '%'||${DCODE}||'%')
    WHERE ROW_NUMBER BETWEEN  ${startCount} AND ${endCount}
        
</select> 
cs

 

 

 

 

 

 

 

---------------- 상세검색

 

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// 상세검색 버튼 클릭
$("#userDetailedSearchBtn").click(function(){
    //alert("detailedSearch()");
 
    detailedSearchShow();
    
});
 
function detailedSearchShow(){
    var modalTitle = {};
    modalTitle.formClass = "USER_detailedSearch";
    modalTitle.title = "사용자 상세검색";
    
    modalFormClean();
    
    $(".modal-title").html(
            "<strong>"+modalTitle.title+"</strong>" 
    );
    //사원정보 상세검색
    $("#grid_list_modal").html(
            "<li>" +
            "<label>사원번호</label>"+
            "<input type='text' name='dcode' id='Search_DCODE' >"+
            "</li>"+
            "<li>" +
            "<label>이름</label>"+
            "<input type='text' name='name' id='Search_NAME' >"+
            "</li>"+
            "<li>" +
            "<label>사원ID</label>  "+
            "<input type='text' name='ename' id='Search_ENAME'>"+
            "</li>"+
            "<li>" +
            "<label>부서</label>"+
                "<select name='department' id='Search_DEPARTMENT'>"+
                "<option value='select' selected='selected'>선택해주세요</option>"+
                "<option value='DEPT01' >도서관관리팀</option>"+
                "<option value='DEPT02' >일본사업팀 </option>"+
                "<option value='DEPT03' >디자인팀  </option>"+
                "<option value='DEPT04' >자료관리팀 </option>"+
                "</select>"+
            "</li>"+
            "<li>" +
            "<label>직급</label>"+
                "<select name='position' id='Search_POSITION'>"+
                "<option value='select' selected='selected'>선택해주세요</option>"+
                "<option value='W_PO1' >사원 </option>"+
                "<option value='W_PO2' >선임</option>"+
                "<option value='W_PO3' >책임 </option>"+
                "<option value='W_PO4' >과장 </option>"+
                "<option value='W_PO5' >차장 </option>"+
                "<option value='W_PO6' >팀장 </option>"+
                "<option value='W_PO7' >이사 </option>"+
                "</select>"+
            "</li>"+
            "<li>" +
            "<label>사원상태</label>"+
                "<select name='present' id='Search_PRESENT'>"+
                "<option value='select' selected='selected'>선택해주세요</option>"+
                "<option value='W_PE1' >정상회원</option>"+
                "<option value='W_PE2' >대출정지</option>"+
                "<option value='W_PE3' >관리자</option>"+
                "</select>"+
            "</li>"
    );
    listCss();
    $("#popup_btn").html(
            "<button type='button' id='close' class='btn btn-default' data-dismiss='modal'>닫기</button>"+
            "<button type='button' id='detailedSearch_Btn' class='btn btn-default' data-dismiss='' >검색하기</button>"
    );
    
    
    $("#Search_DCODE, #Search_NAME, #Search_ENAME, #Search_DEPARTMENT, #Search_POSITION, #Search_PRESENT ").keypress(function(e) {
        if (e.keyCode == 13) {
            detailedSearch();
            $("#close").click();
        }
    });
    
    $("#detailedSearch_Btn").click(function(){
        detailedSearch();
        $("#close").click();
    });
    
    
    
}
 
// 사용자 상세검색
function detailedSearch() {
 
    var DCODE = $("#Search_DCODE").val();
    var NAME = $("#Search_NAME").val();
    var ENAME = $("#Search_ENAME").val();
    var DEPARTMENT = $("#Search_DEPARTMENT").val();
    var POSITION = $("#Search_POSITION").val();
    var PRESENT = $("#Search_PRESENT").val();
 
    $("#list2").jqGrid(
            'setGridParam',
            {
                url : "/library/userDetailedSearch.do?DCODE=" + DCODE
                        + "&NAME=" + NAME + "&ENAME=" + ENAME + "&PRESENT="
                        + PRESENT + "&POSITION=" + POSITION + "&DEPARTMENT="
                        + DEPARTMENT,
                page:1,
                loadComplete : function() {
                    var totalRecords = $('#list2').jqGrid('getGridParam','records');
                      init("list2","paginate",totalRecords,"");
 
 
                       if(totalRecords==0){
                           alert("검색된 사용자가 없습니다.");
                       }
                }
 
            }).trigger("reloadGrid");
 
}
 
cs

 

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    // 사용자 상세검색
        @RequestMapping(value = "/userDetailedSearch.do", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
        public @ResponseBody
        HashMap<String, Object>  userDetailedSearch(
                HttpServletRequest req,
                Emp_SearchVo vo,
                @RequestBody String DCODE,
                @RequestBody String NAME,
                @RequestBody String ENAME,
                @RequestBody String PRESENT,
                @RequestBody String POSITION,
                @RequestBody String DEPARTMENT,
                @RequestParam(value = "page", required = falseint page,
                @RequestParam(value = "rows", required = falseint rows,
                @RequestParam(value = "sord", required = false, defaultValue = "sort"String sord,
                @RequestParam(value = "sidx", required = falseString sidx) {
 
            logger.info("사용자 상세검색");
            
            
            int startCount = (page - 1* rows + 1;  
            int endCount = page * rows;  
            
            List<Emp_SearchVo> emp = null;
            Map<String, Object> map = new HashMap<String, Object>();
 
            map.put("DCODE", req.getParameter("DCODE"));
            map.put("NAME", req.getParameter("NAME"));
            map.put("ENAME", req.getParameter("ENAME"));
            map.put("PRESENT", req.getParameter("PRESENT"));
            map.put("POSITION", req.getParameter("POSITION"));
            map.put("DEPARTMENT", req.getParameter("DEPARTMENT"));
            map.put("SORD", sord);
            map.put("SIDX", sidx);
            map.put("startCount", startCount);
            map.put("endCount", endCount);
 
            emp = employeeServiceimp.userDetailedSearch(map);
 
            HashMap<String, Object> resMap = new HashMap<String, Object>();
            
            int records;
            if(emp.size()==0){
                records = 0;
            }else{
                
                records = emp.get(0).getRow_count();
            }
            int total = (records/rows)+1;
            if(records==10){
                total=1;
            }
 
            
            resMap.put("page", page);
            resMap.put("total", total); // 총페이지
            resMap.put("records", records); // 총레코드
            resMap.put("rows", emp);
            
            
            
            return resMap;
            
            // mybatis map parameter example 이걸로 검색 ㄱ
            // http://cocomo.tistory.com/245 참고
 
        }
cs

 

 

 

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
<select id="userDetailedSearch" resultMap="EmpSearchMapper"
        parameterType="map">
    SELECT *
    FROM (SELECT ROW_NUMBER () OVER 
    (order by ${SIDX}
        <if test="sord == ('asc')">ASC</if>
        <if test="sord == ('desc')">DESC</if>
        ) AS ROW_NUMBER,
    COUNT (*) OVER () AS row_count,
        E.ENAME,E.NAME,E.DCODE,E.BIREDAY,
        DE.DESCRIPTION  AS DEPARTMENT,
        PO.DESCRIPTION  AS POSITION,
        PR.DESCRIPTION  AS PRESENT
        FROM EMPLOYEE E JOIN CODE_TABLE PO ON (PO.CODE = E.POSITION) JOIN
        CODE_TABLE PR ON (PR.CODE = E.PRESENT) JOIN
        CODE_TABLE DE ON (DE.CODE = E.DEPARTMENT)
        WHERE
        DCODE like '%'||#{DCODE}||'%'
        AND NAME like '%'||#{NAME}||'%'
        AND ENAME like '%'||#{ENAME}||'%'
        AND PRESENT like '%'||#{PRESENT}||'%'
        AND POSITION like '%'||#{POSITION}||'%'
        AND DEPARTMENT like '%'||#{DEPARTMENT}||'%')
    WHERE ROW_NUMBER BETWEEN ${startCount} AND ${endCount}
        
    </select>
cs

 

댓글