IT 이모저모

dataforms.jar API 설명 --From 클래스의 클라이언트 서버 간의 통신 - 3

exien 2018. 3. 26. 17:11

서버 측 검증

 이 상태에서 검증을 구현하고 있지 않기 때문에, IntegerField 등에 수치가 아닌 것을 입력하면 convertToServerData에서 변환 오류가 발생하게됩니다. serverMethod에 서버 측 검증을 구현하면 다음과 같이됩니다. validate 메소드에 p를 전달하면 폼에 배치 된 각 필드의 유효성을 호출, 입력 데이터의 확인이 이루어집니다. validate 메소드에서 문제가 발생한 경우 문제의 목록이 반환됩니다. 이 목록의 길이가 0이면 convertToServerData 데이터 변환이 보장 된 상태로되어 변환 된 데이터로 서버 측 처리를 실시해, 그 결과를 SimpleForm.js에 보냅니다. 목록의 길이가 1 이상인 경우 그 목록을 SimpleForm.js에 보냅니다.

SimpleForm.java의 serverMethod에 검증을 구현
    / **
     * 서버 메소드 샘플.
     * @param p POST 된 정보.
     * @return 응답 정보.
     * @throws Exception 예외.
     * / @WebMethod public Response serverMethod ( final Map < String , Object > p ) throws Exception { this . methodStartLog ( logger , p ); Response ret = null ; // new JsonResponse (JsonResponse.SUCCESS ""); List < ValidationError > elist = this . validate ( p ); if ( elist
    
          
        
          
         
         . size () > 0 ) { // 검증에 문제가 발생했기 때문에 그 정보를 SimpleForm.js 보냈습니다. 
            ret = new JsonResponse ( JsonResponse . INVALID , elist ); } else { Map < String , Object > data = this . convertToServerData ( p ); String text1 = ( String ) data . get ( "text1" );   
              
          
              
             
            Integer integer1 = ( Integer ) data . get ( "integer1" ); BigDecimal numeric1 = ( BigDecimal ) data . get ( "numeric1" ); 
            java . sql . Date date1 = ( java . sql . Date ) data . get ( "date1 " ); 
            logger . debug ( "text1 = " + 
               text1 + ", integer1 =" + integer1 + ", numeric1 =" + numeric1 + ", date1 =" + date1 ); // TODO : 하등의 처리를 구현 
            ret = new JsonResponse ( JsonResponse . SUCCESS , "" ); // 성공시 정보를 SimpleForm.js로 전송 } this . methodFinishLog ( logger , ret ); return ret ; }      
                
        
        
        
    

 SimpleForm.java의 serverMethod이 검증의 결과를 반환되었으므로, SimpleForm.js의 send 메소드가 검증 결과를 수신 한 경우의 처리가 필요합니다. 서버 측 검증을 지원하는 SimpleForm.js의 send 메소드는 다음과 같습니다.

SimpleForm.js의 send를 서버 측 검증에 대응
/ **
 * 제출 버튼을 처리합니다.
 * / SimpleForm . prototype . send = function () { // 오류 정보를 지 웁니다. 
    currentPage . resetErrorStatus (); var thisForm = this ; this . submit ( "serverMethod" , function ( r ) { if ( r . status == ServerMethod . INVALID ) { // 서버의 검증 결과를 표시한다. 
            currentPage . setErrorInfo (
  
    
     
      
           
            thisForm . getValidationResult ( r ) thisForm ); } else if ( r . status == ServerMethod . SUCCESS ) { // TODO : 성공시의 처리를 구현. 
            logger . log ( "json =" + JSON . stringify ( r )); } }); };
             
             
        
    
        

 첫 번째 currentPage.resetErrorStatus ();는 검증 결과 표시를 취소하는 방법입니다. 발리 데이 존의 결과가 반환되면 currentPage.setErrorInfo (thisForm.getValidationResult (r) thisForm);에서 그 내용을 볼 수 있습니다.

클라이언트 측 검증

 완전한 검증은 서버 사이드 않으면 수 없습니다. 또한 서버 측 유효성 검사는 보안 측면을 고려할 때 구현이 필수적입니다. 그러나 클라이언트 측 검증을 구현하면 서버와의 통신 횟수를 줄일 수 서버와 통신 회선에 부하를 낮출 수 있습니다. 각종 필드 클래스는 서버 측 검증뿐만 아니라 클라이언트 측의 검증도 포함되어 있습니다. 따라서 this.validate () 메소드를 호출하면 클라이언트 측 검증을 할 수 있습니다. SimpleForm.js의 send 메소드를 다음과 같이 수정하면 문제가있는 데이터를 입력하면 서버에 액세스하지 않은 오류 메시지가 표시됩니다.

클라이언트 측 검증 구현
/ **
 * 제출 버튼을 처리합니다.
 * / SimpleForm . prototype . send = function () { // 오류 정보를 지 웁니다. 
    currentPage . resetErrorStatus (); if ( this . validate ()) { var thisForm = this ; this . submit ( "serverMethod" , function ( r ) { if ( r . status == ServerMethod . INVALID ) {
  
    
      
         
          
               
                // 서버의 검증 결과를 표시한다. 
                currentPage . setErrorInfo ( thisForm . getValidationResult ( r ) thisForm ); } else if ( r . status == ServerMethod . SUCCESS ) { // TODO : 성공시의 처리를 구현. 
                logger . log ( "json =" + JSON . stringify ( r )); } }); } };
                 
                 
            
        
    

 EditForm의 저장 방법 등 dataform.jar에서 제공되는 양식의 각 메서드는이 같은 구조로되어 있습니다. 각종 양식의 표준적인 방법만으로 끝나는 시스템의 경우 이러한 구조를 의식 할 필요는 없습니다. 그러나 특수 버튼을 추가하고 특수 처리를 구현하거나 dataforms.jar에없는 양식의 규정 클래스를 작성하는 경우는 이번 지식이 필요합니다.

 From뿐만 아니라 Page, Field 등의 WebComponent에서 파생 된 클래스도 JavaScript 클래스와 Java 클래스 간의 연계를 지원하고 있습니다. Form 이외의 클래스는 입력 정보를 정리하여 서버로 전송하는 submit 메소드는 지원되지 않지만 SyncServerMethod 클래스를 사용하여 서버 측 메서드를 호출 할 수있게되어 있습니다. 다음 기사에서는 특수 submit 메소드 나 SyncServerMethod 클래스의 사용법을 설명하고 싶습니다.