Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

Graha XML 정의파일 레퍼런스(<validation>)

제목
<querys>
<query funcType="insert">
<validation>

기본정보

분류element필수N
이름<validation>

입력값을 검사한다.

이 요소를 활용한 사례는 다음과 같은 것들이 있는데, insert 기능에서 제목이 공백인지 검사한다.

위 프로그램 중 메모장 프로그램을 제외한 나머지 프로그램들은 메모장 프로그램에서 부수적인 기능을 추가한 것이므로, 소스코드는 매우 유사하다.

위 프로그램들에서 사용되는 코드는 다음과 같다.

<validation method="POST">
<param name="title" not-null="true" msg="제목은 필수 항목입니다!" />
</validation>

위와 같이 정의하면, 서버쪽에서 자동으로 입력값을 체크 한다.

클라이언트쪽에서는 _check 라는 Javascript 함수를 생성하는데, _check 함수는 _base.xml 에 정의된 다음과 같은 함수들을 이용하여 입력값을 체크한다.

  • _minLength
  • _maxLength
  • _notNull
  • _numberFormat
  • _minValue
  • _maxValue
  • _format

이 경우 _base.xml 파일을 상속받아 사용한다면, submit 직전에 _base.xml 에서 정의한 check_submit 함수가 호출되고, 조건을 충족시키지 못하는 항목이 있다면, alert 창을 띄우고, submit 을 멈춘다.

저 함수들이 정의되어 있지 않다면, 클라이언트에서는 검사하지 않고, 서버쪽에서만 검사한다. 예를 들어 _base.xml 파일에 _dateFormat 함수는 생략되어 있는데, 날짜 형식은 submit 이 된 이후에 서버쪽에서만 검사한다.

만약 _foucs 라는 함수가 정의되어 있다면, _focus 함수를 호출한다.

위의 예제에서 Graha 가 자동으로 만드는 _check 함수는 다음과 같다.

function _check(form, out) {
if(!_notNull(form, "title")) {
if(arguments.length > 1) {
out.push({param:"title", msg:"제목은 필수 항목입니다!", not_null:true});
result = false;
} else {
alert("제목은 필수 항목입니다!");
if(typeof(_focus) == "function") {_focus(form, "title");}
return false;
}
}
return result;
}

이 경우 조건을 충족시키지 못하는 여러 개의 항목이 있다면, 첫 번째 alert 창을 띄우고, submit 이 멈출 것이다.

이런 방식은 사용자 경험에 부정적인 측면이 있다.

예를 들어 여러 개의 필수 입력항목이 있다면, 경고메시지를 한번에 보여줄 필요가 있다.

이것을 해결하기 위해서는 check_submit 함수를 다시 정의해야 하고, check_submit 함수를 다시 정의하기 위한 메모장 프로그램의 소스코드는 다음과 같다.

<script src="../../js/memo.insert.js" name="check_submit" override="true" />

memo.insert.js 에서는 다음과 같다.

var out = new Array();
if(typeof(_check) == "function" && !_check(form, out)) {
MessageArea.alert(out, focusFor);
return false;
}

_check 함수에 2번째 파라미터를 공급하면, 모든 항목을 전부 검사해서, 결과를 한 번에 돌려준다.

파라미터로 공급한 out 이라는 변수에는 다음과 같은 것이 담겨서 돌아오게 된다.

{param:"title", msg:"제목은 필수 항목입니다!", not_null:true}

이것을 처리하는 예제는 memo.message_area.js 파일의 MessageArea.alert 함수에 있는데, 다음과 같다.

for(var i = 0; i < out.length; i++) {
$("div#message_area ul.alert").append("<li>" + out[i].msg + "</li>")
}

여기까지는 Graha 가 자동으로 입력값을 check 하는 기능이었고, 응용프로그래가 직접 sql 이나 Java Class 를 작성하는 방법도 있는데, sql 을 직접 작성하는 방식의 예제는 다음과 같다.

<validation method="POST">
<command check="${result} empty">
<sql>
select user_name from users where user_name = ? limit 1
</sql>
<params>
<param name="user_name" datatype="varchar" value="param.user_name" />
</params>
</command>
</validation>

위의 예제는 회원가입할 때, 아이디가 중복되어 있는지 검사하는 것인데, sql 의 실행결과가 있다면 msg 속성값을 에러메시지로 보낸다.

Java Class 를 작성하는 예제는 다음과 같다.

<validation method="POST">
<command type="native" class="kr.graha.sample.UserValidator" />
</validation>

kr.graha.sample.UserValidator 라는 Java Class 는 입력값을 검사하여, 입력값이 오류가 없는 경우 null 을 리턴하고, 그렇지 않는 경우 에러메시지를 리턴해야 한다.

참조링크 1
참조링크 2
참조링크 3
Synonym
최종수정일2024-05-29

속성

이름Synonym필수최종수정일
@method필수2022-04-17

하위 요소

이름Synonym필수최종수정일
<param>필수2022-05-24
<command>2024-05-29