⊙사용자 이름.사원번호검색 완료(페이징,알럿창)
완료하였음
이리저리 수정하다가 정착이된듯
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");
}
}
|
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 = false) int page,
@RequestParam(value = "rows", required = false) int rows,
@RequestParam(value = "sord", required = false, defaultValue = "sort") String sord,
@RequestParam(value = "sidx", required = false) String 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 = false) int page,
@RequestParam(value = "rows", required = false) int rows,
@RequestParam(value = "sord", required = false, defaultValue = "sort") String sord,
@RequestParam(value = "sidx", required = false) String 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 = false) int page,
@RequestParam(value = "rows", required = false) int rows,
@RequestParam(value = "sord", required = false, defaultValue = "sort") String sord,
@RequestParam(value = "sidx", required = false) String 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 |
'개발 > 개인' 카테고리의 다른 글
사용자 이름,사원번호 검색 페이징 수정 , 검색 쿼리의 변화 (0) | 2016.12.20 |
---|---|
사용자 다중선택 - 삭제,수정시 체크박스 유지 에러해결 (0) | 2016.12.19 |
사용자 정보수정 - 삭제 후 그리드 리로드(체크박스유지) -> 16.12.15 수정 (0) | 2016.12.07 |
function userDetaileViewShow(emp,title) - 사용자 정보 상세보기 전체부분 (0) | 2016.12.01 |
function userUpdateModalShow(emp,title) // 사용자 정보 상세보기 - 정보수정부분전체 (0) | 2016.12.01 |
댓글