른록노트

[Spring] 전자정부프레임워크 validator 적용하기 (3.10) 본문

Web/[Spring]

[Spring] 전자정부프레임워크 validator 적용하기 (3.10)

른록 2021. 12. 20. 15:51

[Spring] 전자정부프레임워크 validator 적용하기 (3.10)

1. 개요

입력값 검증을 위한 Validation 기능은 Valang, Jakarta Commons, Spring 등에서 제공한다.
전자정부프레임워크는 Jakarta Commons Validator를 Spring Framework과 연동하여 사용하는 방법에 대해서 설명하고자 한다.

1.1. 장점

Jakarta Commons Validator는 필수값, 각종 primitive type(int,long,float…), 최대-최소길이, 이메일, 신용카드번호등의 값 체크등을 할 수 있도록 Template이 제공된다.
이 Template은 Java 뿐 아니라 Javascript로도 제공되어 client-side, server-side의 검증을 함께 할 수 있으며,
Configuration과 에러메시지를 client-side, server-side 별로 따로 하지 않고 한곳에 같이 쓰는 관리상의 장점이 있다.

2. sample 프로젝트에 적용된 소스 수정해보기

전자정부프레임워크 3.10 시작하기

2.1. egovSampleRegister.jsp에 name필드 maxlength 검사 추가

<form name="sampleVO">
    <field property="name" depends="required"> <!-- depends에 maxlength 추가  -->
        <arg0 key="title.sample.name" />
        <arg1 name="maxlength" key="${var:maxlength}" resource="false" /> <!-- name이 maxlength 인 파라미터 추가 -->
        <var> <!-- resource 속성을 false로 하면 여기서 바로 값을 줄 수 있다 (true를 하면 meesage.props 사용) -->
            <var-name>maxlength</var-name>
            <var-value>30</var-value>
        </var>
    </field>
    <field property="description" depends="required">
        <arg0 key="title.sample.description" />
    </field>
    <field property="regUser" depends="required,maxlength">
        <arg0 key="title.sample.regUser" />
    </field>
</form>

2.2. validator-rules.xml 파일에서 실제 사용되는 소스코드 보기

<validator name="maxlength"
    classname="org.springmodules.validation.commons.FieldChecks"
       method="validateMaxLength"
 methodParams="java.lang.Object,
               org.apache.commons.validator.ValidatorAction,
               org.apache.commons.validator.Field,
               org.springframework.validation.Errors"

      depends=""
          msg="errors.maxlength">

에러가 나면 message.props에서 erros.maxlength 메시지가 출력되고
실제 사용되는 메소드는 org.springmodules.validation.commons.FieldChecks 클래스안에 validateMaxLength 메소드 입니다.

public static boolean validateMaxLength(Object bean, ValidatorAction va,
                                    Field field, Errors errors) {

    String value = FieldChecks.extractValue(bean, field);

    if (value != null) {
        try {
            int max = Integer.parseInt(field.getVarValue("maxlength")); //여기에 사용되는 arg가 위에 등록한 <arg1 name="maxlength" key="${var:maxlength}" resource="false" /> 입니다.

            if (!GenericValidator.maxLength(value, max)) {
                FieldChecks.rejectValue(errors, field, va);

                return false;
            }
        }
        catch (Exception e) {
            FieldChecks.rejectValue(errors, field, va);
            return false;
        }
    }

return true;
}

참고사이트

전자정부프레임워크 validator
전자정부프레임워크 validator 추가

반응형
Comments