입력값을 검사한다.
이 요소를 활용한 사례는 다음과 같은 것들이 있는데, 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 을 리턴하고, 그렇지 않는 경우 에러메시지를 리턴해야 한다.
|