- 자바스크립트 부분


        /* 숫자입력단위 콤마(",") & 입력값 숫자체크 */

    var SetComma = function(str) {

        var regMustNumberComma = /^[0-9|,]+$/;

        var regMustNoStartZero = /^[0]/;

        

        str = str.replace(/,/g,'');

        var retValue = "";

            for( i = 1; i <= str.length; i++ ) {

                if( i > 1 && (i%3) == 1 )

                    retValue = str.charAt(str.length - i) + "," + retValue;

                else

                    retValue = str.charAt(str.length - i) + retValue;

            }

            if( regMustNoStartZero.test(retValue) == true && window.event.keyCode != 9 ) {

                alert("입력숫자는 '0'으로 시작할 수 없습니다.");

                return "";

            }

            if( regMustNumberComma.test(retValue) == false ) {

                alert("숫자만 입력하실 수 있습니다.");

                return "";

            }

            return retValue;

    };



- 입력 폼

<input type="text" class="text" name="remvlPointer" size="20" onkeyup="this.value=SetComma(this.value)" value="${dataBean.remvlPointer}"/>



- 주의사항

입력폼에 사용자가 숫자를 입력할때 동적으로 천단위로 콤마를 찍어주고 DB에 INSERT 할때에는 콤마를 제거해주는 작업을 해주고 INSERT 해야한다. 까먹지마...

- 콤마제거하는 JAVA 단 메서드(Null 체크하는 Validator.isEmpty() 는 회사프레임워크 메서드다. )


    public static String getPureNumber(String inquireParam) {


        String returnStr = "";


        if( Validator.isEmpty(inquireParam) ) {

            returnStr = String.valueOf(StringUtil.ZERO);

        }

        else{

            inquireParam = inquireParam.replaceAll(",", "");

            returnStr = inquireParam;

        }

        return returnStr;

    }

- 디비에서 SELECT 해서 화면에 뿌려줄때는 또 콤마를 찍어야 되겟지?

    public static String getDecimalFormat(long inquireParam) {

        String returnStr = "";


        DecimalFormat format = new DecimalFormat("#,##0");

        returnStr = format.format(inquireParam);


        return returnStr;

    }


<%

    /* 사용자 IP */

    String userAddress = request.getRemoteAddr();

    /* 사용자 레퍼러(이전 페이지) */

    String userReferer = request.getHeader("referer");

%>


    <script type="text/javascript">

    $().ready(function() {

        

    /* 사용자 OS */

    var userOs = "";

   

        /* 브라우저 확인 */

        var Browser = { a : navigator.userAgent.toLowerCase() }

        var browserNm = "";

        var browserVr = "";

        

        if( Browser.a.indexOf('msie 6') != -1 ) {

            browserNm = "Internet Explorer";

            browserVr = "v.6";

        }

        if( Browser.a.indexOf('msie 7') != -1 ) {

            browserNm = "Internet Explorer";

            browserVr = "v.7";

        }

        /* IE8 부터는 msie 값으로 브라우저 버전을 분별할수 없음 trident 값으로 해야한다. */

        if( Browser.a.indexOf('trident/4.0') != -1 ) {

            browserNm = "Internet Explorer";

            browserVr = "v.8";

        }

        if( Browser.a.indexOf('trident/5.0') != -1 ) {

            browserNm = "Internet Explorer";

            browserVr = "v.9";

        }

        if( Browser.a.indexOf('trident/6.0') != -1 ) {

            browserNm = "Internet Explorer";

            browserVr = "v.10";

        }

        if( !!window.opera ) {

            browserNm = "opera";

            browserVr = "opera";

        }

        if( Browser.a.indexOf('safari') != -1 ) {

            browserNm = "safari";

            browserVr = "safari";

        }

        if( Browser.a.indexOf('applewebkit/5') != -1 ) {

            browserNm = "safari3";

            browserVr = "safari3";

        }

        if( Browser.a.indexOf('mac') != -1 ) {

            browserNm = "mac";

            browserVr = "mac";

        }

        if( Browser.a.indexOf('chrome') != -1 ) {

            browserNm = "chrome";

            browserVr = "chrome";

        }

        if( Browser.a.indexOf('firefox') != -1 ) {

            browserNm = "firefox";

            browserVr = "firefox";

        }

        

        /* 날짜구하기(년/월/일) */

        var date = new Date();

        var thisYear = date.getFullYear();

        var thisMonth = date.getMonth() + 1;

        var thisDate = date.getDate();

        /* 요일구하기 숫자(1:월, 2:화, 3:수, 4:목, 5:금, 6:토, 7:일) */

        var thisDay = date.getDay();

        /* 시간구하기(시/분/초) */

        var thisHours = date.getHours();

        var thisMinutes = date.getMinutes();

        var thisSeconds = date.getSeconds();

        

        /* ********** 날짜가 10월 이전이면 앞에 '0' 붙이기 ********** */

        if( thisMonth < 10 ) {

            thisMonth = "0" + thisMonth;

        }

        

        if( thisHours < 10 ) {

            thisHours = "0" + thisHours;

        }

        /* ********** 날짜가 10월 이전이면 앞에 '0' 붙이기 ********** */

        

  ※ JAVA 카테고리에서 실제서버(CentOS) 에서 

     System.getProperty("os,name"); 로 실패 후 자바 스크립트로 변경작업 내역임.

        /* ********** 사용자 시스템정보(OS) ********** */

        var ua = navigator.userAgent;

        alert("Client ua : " + ua);

        

        if( ua.indexOf("NT 5.0") != -1 ) {

        userOs = "Windows 2000";

        }

        else if( ua.indexOf("NT 5.1") != -1 ) {

        userOs = "Windows XP";

        }

        else if( ua.indexOf("NT 5.2") != -1 ) {

        userOs = "Windows Server 2003";

        }

        else if( ua.indexOf("NT 6.0") != -1 ) {

        userOs = "Windows Vista";

        }

        else if( ua.indexOf("NT 6.1") != -1 ) {

        userOs = "Windows 7 or Server 2008";

        }

        else if( ua.indexOf("NT 6.2") != -1 ) {

        userOs = "Windows 8 or Server 2012";

        }

        else if( ua.indexOf("98") != -1 ) {

        userOs = "Windows 98";

        }

        else if( ua.indexOf("95") != -1 ) {

        userOs = "Windows 95";

        }

        else if( ua.indexOf("Linux") != -1 ) {

        userOs = "Linux";

        }

        else if( ua.indexOf("Mac") != -1 ) {

        userOs = "mac";

        }

        else{

        userOs = "I Don't Know OS";

        }

        /* ********** 사용자 시스템정보(OS) ********** */

운영체제 별 OS Name / OS.version 얻기


String Os_name = System.getProperty("os.name");

String Os_version = System.getProperty("os.version");


Os_name "Windown" 일때, Os_version 으로 Windown 버전을 분별 할 수 있다.


출처 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx


근데 문제점 발생

- 로컬에서 Tomcat 으로 띄우고 하면 내 윈도우 및 버전이 정상적으로 alert() 로 띄우면 값이 보이는데,

  테스트 이후에 실제 서버(CentOS) 에 올려서 해보면 무조건 sunOS 라고 뜬다..

  모.. CentOS 로 띄웠으니.. 그러게 보이는거야 당연하지만.. 좀 놀랬다. 로컬에서는 잘 되었으니까...

  그래서 Googling 해보니...

  navigator.userAgent 를 써서 시스템 정보를 구해야 한다고 한다.

  navigator.userAgent 를 써도 브라우저 상세 버전은 Version number 로 분기처리를 해야되니 

  microsoft 에서 퍼온 Operation System Version 은 꼭 알아야 할 정보일듯... 

 

 navigator.userAget 이용한 사용자 Os 정보 확인은 JAVASCRIPT 카테고리에서 확인

- 참 필요없는 기능인거 같지만, 프로젝트 나가면 소스를 보고 분석하기 귀찮고, 몬가 빨리 찾고싶을때 가끔 

  편리하게 쓰긴하지만.. 이러지말자.  

 

- SQL QUERY

SELECT *
   FROM USER_TAB_COMMENTS
 WHERE COMMENTS LIKE '%자가검침%';

 

 

        /* 비밀번호 확인 */

        var jsPwdCheck = function() {

            

            var empPwd = $("#empPwd").val();

            var empPwd2 = $("#empPwd").val();

            

            // 비밀번호 정규식 체크

            var regEmpPwd = /^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[~,!,@,#,$,*,(,),=,+,_,.,|]).*$/;

            

            if( regEmpPwd.test(empPwd) == false ) {

                alert('8 ~15자의 영문/숫자/특수문자 혼용만 가능합니다.');

                $("#empPwd").val('');

                $("#empPwd").focus();

                return false;

            }

            

        };

- ORACLE MERGE INTO

  두개의 테이블을 비교한 후에 INSERT / UPDATE 할때 대단히 유용할 것 같다.

  적용할 테이블, 비교할 테이블의 값을 비교 후 존재하면 UPDATE, 없으면 INSERT

  정말 대박이다. 

 

 

'공부 > ORACLE_SQL' 카테고리의 다른 글

ORACLE_[ DB_LINK CREATE ]  (0) 2013.11.21
ORACLE_[ 컬럼명으로 테이블 찾기 ]  (0) 2013.09.09
ORACLE_[ 시퀀스(Sequence) ]  (0) 2013.05.20
ORACLE_[ SubQuery ]  (0) 2013.05.20
ORACLE_[ GROUP BY와 HAVING절, 그리고 GROUPING SETS ]  (0) 2013.05.20

구지 일일이 설명을 다하기는 시간이 오래 걸릴듯, 다른거 할게 많아서... 소스를 첨부하니 이해하시길


<script type="text/javascript">
   
   var Browser = { a : navigator.userAgent.toLowerCase() }
   
   Browser = {
           ie : /*@cc_on true || @*/ false,
           ie6 : Browser.a.indexOf('msie 6') != -1,
           ie7 : Browser.a.indexOf('msie 7') != -1,
           ie8 : Browser.a.indexOf('msie 8') != -1,
           opera : !!window.opera,
           safari : Browser.a.indexOf('safari') != -1,
           safari3 : Browser.a.indexOf('applewebkit/5') != -1,
           mac : Browser.a.indexOf('mac') != -1,
           chrome : Browser.a.indexOf('chrome') != -1,
           firefox : Browser.a.indexOf('firefox') != -1
       }
   
   
   // 기본 Zoom
   var nowZoom = 100;
   // 최대 Zoom
   var maxZoom = 200;
   // 최소 Zoom
   var minZoom = 80;
   
   // 화면크기 확대
   var jsBrowseSizeUp = function() {
       
       if( Browser.chrome ) {
           if( nowZoom < maxZoom ) {
               nowZoom += 10; // 10 = 25%씩 증가
               document.body.style.zoom = nowZoom + "%";
           }
           else{
               alert('최대 확대입니다.');
           }
       }
       else if( Browser.opera ) {
           alert('오페라는 화면크기 기능을 지원하지 않습니다.\n브라우저 내의 확대/축소 기능을 이용하시기 바랍니다.');
       }
       else if( Browser.safari || Browser.safari3 || Browser.mac ) {
           alert('사파리, 맥은 화면크기 기능을 지원하지 않습니다.\n브라우저 내의 확대/축소 기능을 이용하시기 바랍니다.');
       }
       else if( Browser.firefox ) {
           alert('파이어폭스는 화면크기 기능을 지원하지 않습니다.\n브라우저 내의 확대/축소 기능을 이용하시기 바랍니다.');
       }
       else {
           if( nowZoom < maxZoom ) {
               nowZoom += 10; //10 = 25%씩 증가
               document.body.style.position = "relative";
               document.body.style.zoom = nowZoom + "%";
           }
           else{
               alert('최대 확대입니다.');
           }
       }
   };
   
   // 화면크기 축소
   var jsBrowseSizeDown = function() {
       
       if( Browser.chrome ) {
           if( nowZoom < maxZoom ) {
               nowZoom -= 10; // 10 = 25%씩 증가
               document.body.style.zoom = nowZoom + "%";
           }
           else{
               alert('최대 확대입니다.');
           }
       }
       else if( Browser.opera ) {
           alert('오페라는 화면크기 기능을 지원하지 않습니다.\n브라우저 내의 확대/축소 기능을 이용하시기 바랍니다.');
       }
       else if( Browser.safari || Browser.safari3 || Browser.mac  ) {
           alert('사파리, 맥은 화면크기 기능을 지원하지 않습니다.\n브라우저 내의 확대/축소 기능을 이용하시기 바랍니다.');
       }
       else if( Browser.firefox ) {
           alert('파이어폭스는 화면크기 기능을 지원하지 않습니다.\n브라우저 내의 확대/축소 기능을 이용하시기 바랍니다.');
       }
       else {
           if( nowZoom < maxZoom ) {
               nowZoom -= 10; //10 = 25%씩 증가
               document.body.style.position = "relative";
               document.body.style.zoom = nowZoom + "%";
           }
           else{
               alert('최대 확대입니다.');
           }
       }
   };

   // 화면크기 원래대로(100%)
   var jsBrowseSizeDefault = function() {
       
       nowZoom = 100;
       document.body.style.zoom = nowZoom + "%";
   };

</script>


화면 조정을 하고자하는 곳에

확대 onclick="jsBrowseSizeUp()"

축소 onclick="jsBrowseSizeDown();" 

기본 onclick="jsBrowseSizeDefault();" 이벤트룰 주면 완성!


사파리 & 파이어폭스 & 오페라는 위의 기능으로 불가능

구글링 결과 css transform 을 이용하면 가능하다고 하는데... 현재 개발중인 프로젝트 메뉴가 이미지로 구성이 많이 되어 있어서 transform 으로 확대를 하면 화면깨짐 현상이 나타나서 결국엔 위의 스크립트와 같이 기능지원을 하지 않았다.


나중에 시간날때  css transform 공부좀 하자..^_^

참고한 사이트 : http://angeleyes.tistory.com/259#.Uh6Zsz9mKLI  (css Transform)

=================================================================

키 | 코드(숫자)

=================================================================

←(백스패이스) = 8

TAB = 9

ENTER = 13

SHIFT = 16

CTRL = 17

ALT = 18

PAUSEBREAK = 19

CAPSLOOK = 20

한/영 = 21

한자 = 25

ESC = 27

스패이스 = 32

PAGEUP = 33

PAGEDN = 34

END = 35

HOME =36

←(중간) = 37

↑(중간) = 38

→(중간) = 39

↓(중간) = 40

INSERT = 45

DELETE = 46

0 = 48

1 = 49

2 = 50

3 = 51

4 = 52

5 = 53

6 = 54

7 = 55

8 = 56

9 = 57

A = 65

B = 66

C = 67

D = 68

E = 69

F = 70

G = 71

H = 72

I = 73

J = 74

K = 75

L = 76

M = 77

N = 78

O = 79

P = 80

Q = 81

R = 82

S = 83

T = 84

U = 85

V = 86

W = 87

X = 88

Y = 89

Z = 90

윈도우(왼쪽) = 91

윈도우(오른쪽) = 92

기능키 = 93

0(오른쪽) = 96

1(오른쪽) = 97

2(오른쪽) = 98

3(오른쪽) = 99

4(오른쪽) = 100

5(오른쪽) = 101

6(오른쪽) = 102

7(오른쪽) = 103

8(오른쪽) = 104

9(오른쪽) = 105


.(오른쪽) = 110

/(오른쪽) = 111

*(오른쪽) = 106

+(오른쪽) = 107

-(오른쪽) = 109

F1 = 112

F2 = 113

F3 = 114

F4 = 115

F5 = 116

F6 = 117

F7 = 118

F8 = 119

F9 = 120

F10 = 121

F11 = 122

F12 = 123

NUMLOCK = 144

SCROLLLOCK = 145

=(중간) = 187

-(중간) = 189

`(왼쪽콤마) = 192

\(중간) = 220

Root Cause  : 


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'restTestController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.srpost.egov.arisuinfo.service.CsInfoService com.srpost.egov.arisuinfo.test.RestTestController.csInfoService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.srpost.egov.arisuinfo.service.CsInfoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}



해당 Controller(restTestController) 에 같은 타입을 extend 받는 객체를 여러개 @AutoWired 로 선언해 높으면 이와같은오류발생... @AutoWired 는 타입으로 인젝션을 맺으니까?


eGov 프레임워크 커뮤니티에 같은 오류발생하시는 개발자분이 올려주신글에 답변을 보니

@Resource 로 변경을하라고함.. 변경하니 오류사라짐.. 그럼 모든 Controller 의 @AutoWired -> @Resource 로 바꿔야 된다는 소리인가?


우선, eGov프레임워크 커뮤니티에 글을 올렸으니.. 답변을 기다려보자.

현재 FORM 인코딩은 'UTF-8' 이로 Submit 으로 외부로 파라미터를 전송하는데(서울시통합검색)

인코딩이 'EUC-KR' 이다.

Submit() 전송되는걸 보면 서울시 통합검색창에 한글이 깨져서 보인다..


구글링해서 <Form> 태그에 accept-charset="euc-kr" 속성을 넣어주면 된다고 해서 테스트를 해보니 

정상적으로 파라미터가 넘어갔다.(테스트는 거의 항상 크롬에서 했다.)


한참있다가 IE 에서 하니 안먹는다.. 'IE' 가 규약을 잘 안지켜서 그렇다는데..

혹시몰라서, IE, 크롬, 파이어폭스, 오페라 다해봤는데.. IE만 한글이 깨진다..


또, 욜 - 구글링... 찾았다! 인터넷에 나온거 해보면 안되서, 조금 이리저리 수정해서 지금 적용된 <Script> 소스다.


<script type="text/javascript">


   //IE 에서 accept-charset="euc-kr" 안먹음 해결

   var eucKrEncodng = function() {

       

       if( /MSIE/.test(navigator.userAgent) ) {

           

           document.charset = 'euc-kr';

           return true;

           document.charset = 'utf-8';

       } 

   };

</script>


위와같이 적용을 하면 한글이 모든 브라우저에서 깨지지는 않는다. 근데, 문제발생

IE에서 현재페이지 -> 서울시 통합검색을 하면 현재페이지에서 <Form action> 설정한 페이지로 이동을 해서 다시 현재페이지로 돌아오기 위해서 브라우저의 '뒤로가기'를 누르면 메뉴의 Text 부분이 모두 깨짐.

(해결방안 : 현재페이지에서 통합검색시 <Form Target="_blank"> 줘서 새창띄우기로 뒤로가기 방지)


<!-- 서울시 통합검색 -->

<form name="seoulSearch" action="http://search.seoul.go.kr/newsearch/newTotalSearch.jsp" method="post"                accept-charset="euc-kr" onsubmit="eucKrEncodng();" target="_blank">

     <input type="hidden" name="alias" value="arisu" />

         <fieldset>

                <legend>통합검색</legend>

                <label for="text" class="skip"><img src="<c:url value="/resources/images/cyber/common/skip.gif"/>"                    alt="서울시 통합검색"/></label>

                <input type="text" name="query" id="text" value="" />

                <input type="image" src="<c:url value="/resources/images/cyber/common/search.gif"/>" alt="검색" />

        </fieldset>

</form>





+ Recent posts