개인적인 정리

전자정부표준프레임워크 validation Rule 추가 본문

전자정부표준프레임워크

전자정부표준프레임워크 validation Rule 추가

yeon.Biju 2020. 9. 9. 14:00

전자정부표준프레임워크에 Spring Modules를 이용한 Jakarta Commons Validator 를 사용하는 방법을 알아봤다. 

이 글은 아래 글을 기본으로 한다.

https://web-obj.tistory.com/456

 

전자정부표준프레임워크 validation 검증/체크

전자정부표준프레임워크의 validation 을 체크하는 것을 정리해보고자 한다. Spring framework + Jakarta Commons Validator 의 조합으로 보인다. 처음볼 때는 아래 위키가 조금 헷갈렸지만, 적용을 해보고 다시

web-obj.tistory.com

Commons Validator 에서 제공하는 것 외에 rule을 추가해보고자 한다. 

 

 

아래 전자정부표준프레임워크 위키문서를 보고 따라했다.

www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:validation:add_rules_in_commons_validator

 

egovframework:rte:ptl:validation:add_rules_in_commons_validator [eGovFrame]

Commons Validator는 primitive type, 필수값, 이메일등 흔히 사용되는 유형에 대한 validation rule을 template으로 제공하지만, 프로젝트의 특성에 따라 공통으로 사용되는 validation rule이 발생되고 이를 추가해

www.egovframe.go.kr

위키문서에서는 주민등록번호 validator 를 추가하는 예제를 들어 설명하고 있다.

 

*일단 가상의 룰을 추가하는데, 문자열이 coffee 이면 true, 아니면 false를 return 하도록 추가해보자.

(실행환경에 몇몇의 예제들이 구현되어 있는데, egovframework.rte.ptl.mvc.validation.RteFieldChecks.class 파일을 열어보면 한글, 영문등 몇개의 validator를 제공하고 있어 유용하게 쓸 수 있을 것 같고, 참고용으로는 아주 좋다.)

 

먼저 수정 또는 추가해야 할 파일들을 생각해보자.

1. 클래스 생성

   - validation rule을 추가할 자바 클래스

2. com-rules.xml

   - validator 가 정의된 xml파일(javascript 포함)

3. message 파일들

   - message-common_en.properties

   - message-common-ko.properties

4. form-validation 이 정의된 xml 파일

 

 

1. 클래스 생성

   - /egov/src/main/java/egovframework/com/cmm/validation/CustomValidator.java 로 생성하였다.

   - 적당히 원하는 위치에 적당한 파일명으로 생성한다.

   - 소스내용은 아래와 같다.

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
package egovframework.com.cmm.validation;
 
import org.apache.commons.validator.Field;
import org.apache.commons.validator.ValidatorAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.Errors;
import org.springmodules.validation.commons.FieldChecks;
 
import egovframework.rte.ptl.mvc.validation.RteGenericValidator;
 
 
public class CustomValidator extends FieldChecks {
    
    /**
     * 커피여부 체크
     *
     * @param bean
     * @param va
     * @param field
     * @param errors
     * @return
     */
    public static boolean validateCoffee(Object bean, ValidatorAction va, Field field, Errors errors) {
 
        String value = FieldChecks.extractValue(bean, field);
 
        if (!"coffee".equals(value)) {
            FieldChecks.rejectValue(errors, field, va);
            return false;
        } else {
            return true;
        }
    }
    
}
 
cs

2. com-rules.xml 에  validator 추가

   - 대략적으로 아래와 같은 내용을 추가한다.

   - validator 를 정의하는 부분에서 아래내용은 작업한 내용을 나머지는 그대로 두었다. javascript 영역도 적당히 수정해주는데, com-rules.xml 에 있는 다른 validator정의를 가져다가 수정해서 작업하면 그다지 어렵지 않다.

name="coffee"

classname="egovframework.com.cmm.validation.CustomValidator"

method="validateCoffee"

msg="errors.coffee"

작업하고 있는 내용으로 넣어준다.

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
<validator name="coffee"
    classname="egovframework.com.cmm.validation.CustomValidator"
       method="validateCoffee"
 methodParams="java.lang.Object,
           org.apache.commons.validator.ValidatorAction,
           org.apache.commons.validator.Field,
           org.springframework.validation.Errors"
      msg="errors.coffee">
  <javascript><![CDATA[
  function validateCoffee(form){
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oCoffee = new coffee();
    for (x in oCoffee) {
        var field = form[oCoffee[x][0]];
        if (field.type == 'text' || field.type == 'textarea') {
        if (trim(field.value).length==0 || !checkCoffee(field.value)) {
            if (i == 0) {
            focusField = field;
            }
            fields[i++= oCoffee[x][1];
            bValid = false;
        }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
  }
  
  function checkCoffee(str){
        for(var i=0;i<str.length;i++){
            if( str !='coffee') {
            
                return false;
            }
        }
        return true;
  }
 
  ]]>
  </javascript>
  
</validator>
 
cs

3. message 파일들 수정

   - com-rules.xml에 validator를 정의하면서 msg="errors.coffee" 라고 하였다. 따라서 errors.coffee를 message파일들에 작성을 해줘야 한다. 

   - message-common_ko.propertiesmessage-common_en.properties 파일 2개에 아래와 같은 내용으로 동일하게 작성해줬다. 

1
errors.coffee={0}은(는) 커피만 입력할 수 있습니다. 
cs

 

4. form-validation 이 정의된 xml 파일을 수정한다. 

   - 이전글에서 Aaaa.xml 로 만들었었다. 

   - 작업하는 JSP의 폼과 필드와 매칭되어 validation을 어떻게 적용할 것인가를 정의하는 파일정로라고 말할 수 있겠다. 

<field property="name" depends="required, maxlength, coffee"> 라고.. 지금 정의한 coffee를 넣어주었다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC 
    "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN" 
    "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
 
<form-validation>
    <formset>
        <form name="aaaaVO">
            <field property="name" depends="required, maxlength, coffee">
                <arg0 key="Aaaa.regist.name" />
                <arg1 key="10" resource="true"/>
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>10</var-value>
                </var>
            </field>        
        </form>
    </formset>
 
</form-validation>
cs

5. 이제 jsp파일을 열어서 폼을 전송해보자.

   - jsp파일 작성에 대해서는 이전글에서 모두 기술되어 있으니 참고한다.

   - 'coffee'라고 입력하지 않는 경우 아래와 같이 출력된다.

 

client-side

server-side 

 

 

이제 완료가 되었다.

Done

Comments