본문 바로가기
개발/개인

사용자 정보 상세조회2 //replace 사용하기

by areumtb 2016. 11. 9.

사용자 정보조회2 에서 처럼 


1
2
3
4
$("#list2").jqGrid('setGridParam',
            {url:"/library/userDetailedSearch.do?map="+params})
            .trigger("reloadGrid");
 
cs


이런식으로 하려다가 400,415,406.. 이런에러들이 막 나드라...



시도1. 기존에 했었던 serializeObject으로 쭉 해보기


1
2
3
4
5
6
7
var params = JSON.stringify($("#USER_detailedSearch").serializeObject());    
    console.log("params : "+params);
 
    $("#list2").jqGrid('setGridParam',
            {url:"/library/userDetailedSearch.do?map="+params})
            .trigger("reloadGrid");
 
cs


500 에러발생 + 이상한 문자열이 끼여있음


http://localhost:8088/library/userDetailedSearch.do?map={%22DCODE%22:%221%2…%81%ED%9A%8C%EC%9B%90%22,%22POSITION%22:%2211%22,%22DEPARTMENT%22:%221%22} 

500 (Internal Server Error)


일단 %22때문에 그런줄 알고 .replace(/#/gi, “”) 이용해서 제거하려고 시도

1
2
3
 $("#list2").jqGrid('setGridParam',
            {url:"/library/userDetailedSearch.do?map="+params.replace(/%22/gi, ""})
            .trigger("reloadGrid");
cs
BUT 제거되지않음...


※.replace(/#/gi, "")   문자열 바꾸기

   원래 .replace("A" “B”)  A라는 첫번째 문자를 B로 바꿔라  라고 단 한번만 이루어 지는거였음 그런데

 [정규식 이용해서 gi 로 감싸기]

str.replace(/#/gi, “”); -> #를 감싼 따옴표를 슬래시로 대체하고 뒤에 gi 를 붙이면 replaceAll 과 같은 결과를 볼 수 있다.

[정규식의 gi 설명]
* g : 발생할 모든 pattern에 대한 전역 검색
* i : 대/소문자 구분 안함
* m: 여러 줄 검색 (참고)

그래서

.replace(/바꾸고싶은 문자/gi, "바꿀문자"  이렇게 쓴다

참조

http://www.codejs.co.kr/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C-replace%EB%A5%BC-replaceall-%EC%B2%98%EB%9F%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/



헣헣..  그래서 이리저리 해보다가 포기하도 



시도2. serialize으로 시도


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 사용자 상세검색
    function detailedSearch(){
    
        
var params = $("#USER_detailedSearch").serialize(); 
    //console.log("JSON.stringify : "+JSON.stringify(params));
    console.log("params : "+params);
 
    $("#list2").jqGrid('setGridParam',
            {url:"/library/userDetailedSearch.do?map="+params})
            .trigger("reloadGrid");
 
 
}
cs


에러발생...

POST http://localhost:8088/library/userDetailedSearch.do?map=DCODE=11&NAME=1&ENAME=1&PRESENT=%EC%A0%95%EC%83%81%ED%9A%8C%EC%9B%90&POSITION=1&DEPARTMENT=1

500 (Internal Server Error)



하아.. 타입문제인가해서 CONTROLLER에 produces = "application/json; charset=UTF-8" 이거두 바꿔주고

받는게 잘못되었나해서 @RequestBody MAP...도 여러번 바꿔줘봤지만 싱패.



그래서 결국 뒤로미뤘던 하나하나 다 받는 방법을 선택... ㅠㅜ 마음에안들어ㅜㅜ



시도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
-eco_userSearch.js
// 사용자 상세검색
function detailedSearch() {
    alert("detailedSearch()");
 
    var DCODE = $("#Search_DCODE").val();
    var NAME = $("#Search_NAME").val();
    var ENAME = $("#Search_ENAME").val();
    var PRESENT = $("#Search_PRESENT").val();
    var POSITION = $("#Search_POSITION").val();
    var DEPARTMENT = $("#Search_DEPARTMENT").val();
 
    alert(NAME);
 
    $("#list2").jqGrid(
            'setGridParam',
            {
                url : "/library/userDetailedSearch.do?DCODE=" + DCODE
                        + "&NAME=" + NAME + "&ENAME=" + ENAME + "&PRESENT="
                        + PRESENT + "&POSITION=" + POSITION + "&DEPARTMENT="
                        + DEPARTMENT
            }).trigger("reloadGrid");
 
    $("#USER_detailedSearch").each(function() {
        this.reset(); // 그리드 리로드 후 폼값 리셋
    });
 
}
 
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
- CONTROLLER
// 사용자 상세검색
    @RequestMapping(value = "/userDetailedSearch.do", method = RequestMethod.POST,
            produces = "application/json; charset=UTF-8")
    public @ResponseBody List<Emp_SearchVo>  userDetailedSearch(HttpServletRequest req,Emp_SearchVo vo,
            @RequestBody String DCODE,
            @RequestBody String NAME,
            @RequestBody String ENAME,
            @RequestBody String PRESENT,
            @RequestBody String POSITION,
            @RequestBody String DEPARTMENT) {
        System.out.println("DDD");
        List<Emp_SearchVo> emp = null;
        
        
        
        vo.setDCODE(req.getParameter("DCODE"));
        vo.setNAME(req.getParameter("NAME"));
        vo.setENAME(req.getParameter("ENAME"));
        vo.setPRESENT(req.getParameter("PRESENT"));
        vo.setPOSITION(req.getParameter("POSITION"));
        vo.setDEPARTMENT(req.getParameter("DEPARTMENT"));
    System.out.println(vo);
        
        emp = employeeServiceimp.userDetailedSearch(vo);
        
        //mybatis map parameter example  이걸로 검색 ㄱ
        //http://cocomo.tistory.com/245 참고
        
        return emp;
    }
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
 -EmpSearch-mapper.xml

    <select id="userDetailedSearch" resultMap="EmpSearchMapper"
        parameterType="com.eco.library.dto.Emp_SearchVo">
        SELECT * FROM EMPLOYEE
        WHERE
        DCODE like '%'||#{DCODE}||'%'
        or NAME like '%'||#{NAME}||'%'
        or ENAME like '%'||#{ENAME}||'%'
        or PRESENT like '%'||#{PRESENT}||'%'
        or POSITION like '%'||#{POSITION}||'%'
        or DEPARTMENT like '%'||#{DEPARTMENT}||'%'
    </select>
cs

  ※ 일단은 쿼리를 이리 짜놨는데 상세검색에서 검색한 조건과 값이 완전 같아야하는지 ,.. 하나라도 같으면 출려해야하는지 모르것다.

==> 보통은 상세검색은 and로 한다고 한다. 11/24

댓글