일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 전자정부 표준프레임워크
- Oracle
- checbox
- SSL
- maven
- 호환성
- 날짜
- JSTL
- 웹 플랫폼 설치 관리자
- 문자열
- jquery
- 스크립트
- DB
- HTML5
- json
- RADIO
- java
- MYSQL
- exception
- @RequestBody
- 네이버스마트 에디터
- 한글
- 오라클
- spring form tag
- 톰캣
- switch
- null
- html
- php
- 이클립스
- Today
- Total
개인적인 정리
전자정부표준프레임워크 validation 검증/체크 본문
전자정부표준프레임워크의 validation 을 체크하는 것을 정리해보고자 한다.
Spring framework + Jakarta Commons Validator 의 조합으로 보인다.
처음볼 때는 아래 위키가 조금 헷갈렸지만, 적용을 해보고 다시 보니 아래 위키가 가장 좋은 문서였다.
아래 위키문서와 전자정부프레임워크에 있는 소스들을 같이보면서 적용을 해보니 잘 되는 것 같다.
www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:security:jakarta_commons_validator
그리고 전자정부표준프레임워크 3.9를 all-in-one 형태로 설치해놓은 것을 기준으로 설명한다.
webobj.tistory.com/72?category=832887
이 글은 전자정부표준프레임워크를 사용할 때 validation을 체크하는데 있어서 Server-side와 Client-side간에 하나의 코드로 동일하게 검증하는 방법을 구현해보는데 목표가 있다.
1. 개요
- 입력값 검증을 위한 Validation 기능은 Valang, Jakarta Commons, Spring 등에서 제공한다.
- 여기서는 Jakarta Commons Validator를 Spring Framework과 연동하여 사용하는 방법에 대해서 설명하고자 한다.
2. 라이브러리
- commons-validator.jar
- spring-modules-validation-0.9.jar
전자정부표준프레임워크를 설치해보면 위 2개의 라이브러리가 잘 들어있다. 없는 경우에는 당연히 추가를 해줘야 한다.
3. DefaultValidatorFactory, DefaultBeanValidator 설정
- 위키에 보면 DefaultValidatorFactory, DefaultBeanValidator 2개의 클래스에 대한 설명이 나와있으니 설명은 위키를 참조한다.
- context-validator.xml 에 보면 아래와 같이 이미 설정이 되어 있다.
- 아래에 있는 validator-rules.xml은 application에서 사용하는 모든 validation rule에 대해 정의하는 파일이라고 한다.
다시 한번 얘기하지만 자세한 설명은 위키문서를 참조한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- Integration Apache Commons Validator by Spring Modules -->
<bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
<property name="validatorFactory" ref="validatorFactory"/>
</bean>
<bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
<property name="validationConfigLocations">
<list>
<!-- 공통기술 -->
<value>classpath:/egovframework/validator/com-rules.xml</value>
<value>classpath:/egovframework/validator/validator-rules.xml</value>
<value>classpath:/egovframework/validator/**/*.xml</value>
</list>
</property>
</bean>
</beans>
|
cs |
4. validator.xml 설정(이름을 Aaaa.xml로 생성함)
- 적당한 위치 즉 위의 validator-rules.xml 에 있는 경로의 위치에 파일을 생성한다. 전자정부표준프레임워크의 소스들에 보면 (/src/main/resources/egovframework/validator) 이미 validator.xml 과 같은 파일들이 많이 생성이 되어 있으니 그것들과 유사하게(이름, 경로등)을 파일을 생성한다.
- validator.xml은 validation rule과 validation할 Form을 매핑한다.
- form name과 field property의 name-rule은 Server-side와 Client-side인 경우에 따라 다르다.
- 여기서는 /src/main/resources/egovframework/validator/com/zzz/Aaaa.xml로 생성을 하였다.
5. 파일을 생성하고 다른 파일에서 내용을 카피하여 집어넣는다.
그럼 대략적으로 아래와 같은 파일내용이다.
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">
<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 |
1) form name="aaaaVO" 는 form name 이 aaaaVO라는 얘기고
2) field property="name" 은 name 이라는 필드명이고
3) depends="required, maxlength" 는 필수값, maxlength 라는 얘기이다.
4) arg0 key="Aaaa.regist.name" 부분은 message_en.properties 또는 message_ko.properties 파일에서 Aaaa.regist.name를 키값으로 메세지를 불러온다는 얘기이다.(오류발생시)
form name과 field property는 validation할 폼 클래스의 이름, 필드과 각각 매핑된다.(camel case)
폼 클래스가 Employee면 employee, DepartmentForm 이면 departmentForm을 form name으로 지정하라.
6. Server-Side Validation
- Server-Side validation 을 먼저 생각해보자.
1) Controller
- jsp파일의 form에서 action으로 넘어가는 Controller 파일에 아래 코드를 추가한다.
1
2
3
|
if (bindingResult.hasErrors()) {
return "adm/zzz/AaaRegist";
}
|
cs |
2) jsp
- Validation을 적용할 jsp를 작성한다.
- <form:errors path="name" /> 부분에 에러메세지가 출력되는 형태이니 <form:errors path="name" /> 를 꼭 써준다.
- 당연한 얘기지만 aaaaVO 클래스에 name 속성이 있어야 한다.
1
2
3
4
5
6
7
8
|
<form:form commandName="aaaaVO" action="/zzz/aaaaainsert.do">
<table>
....
<tr>
<th>이름</th>
<td><form:input path="name" size="20"/><form:errors path="name" /></td>
</tr>
</form:form>
|
cs |
* commandName 가 에러나는 경우에는 modelAttribute 로 대체한다. 스프링 어느 버전부터 변경된 것으로 보인다.
3) 에러메세지 등록
- message_en.properties, message_ko.properties 파일모두에 적당히 등록을 해줘야 하는데
- /egov/src/main/resources/egovframework/message/com/zzz 아래에 다른 것을 카피해서 적당히 넣어준다. message_en.properties, message_ko.properties 둘다 넣어준다.
- controller 클래스는 /egov/src/main/java/egovframework/com/zzz/...... 이고
validator.xml은 /src/main/resources/egovframework/validator/com/zzz/
messge는 /egov/src/main/resources/egovframework/message/com/zzz 이다.
1
|
Aaaa.regist.name=이름
|
cs |
이라고 적당한 위치에 넣어준다. message_en.properties, message_ko.properties 두 파일 모두 넣어준다. 테스트용이므로 적당히 넣어준다.
4)웹 브라우저를 열어서 submit을 실행한다. (당연 에러를 내는 방식으로)
5)필수값인데 넣지 않았기 때문에 에러가 났다.
6) 다시 생각해볼 것이 좀 있다.
- message_en.properties, message_ko.properties 파일에 "이름"만 넣었는데, "is required"가 딸려왔다. 그 내용들은 /src/main/resources/egovframework/message/com/message-common_en.properties
/src/main/resources/egovframework/message/com/message-common_ko.properties
2개의 파일에 위치하고 있다.
즉 에러메세지를 등록할 때에는 수정해야 할(체크해야 할) 파일들에 대해서 유의하자.
(* 아직은 message파일들이 어떤 구조로 동작하는지 충분히 생각해보지 않은 상태라 전자정부표준프레임워크내의 다른 소스들을 기반으로 추측해서 넣었다.)
Server-Side validation은 여기서 일단 Done.
7. Client-Side Validation
1) validator.jsp 추가
- 아래와 같은 내용으로 validation.jsp 를 추가한다.
- 전자정부표준프레임워크를 설치하면 아래와 같은 내용의 소스들은 이미 많이 들어있으니 참고한다.
여기서는 예제로 Controller에 아래와 같이 하나 추가해준다.
1
2
3
4
5
|
@RequestMapping("/zzz/aaaa/validator.do")
public String validate(){
return "egovframework/com/cmm/validator";
}
|
cs |
해당 JSP의 내용은 아래와 같다.
1
2
3
|
<%@ page language="java" contentType="javascript/x-javascript" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<validator:javascript dynamicJavascript="false" staticJavascript="true"/>
|
cs |
2) JSP 설정(taglib,javascript) 추가
2-1) commons-validator taglib를 선언한다.
1
|
<%@ taglib prefix=“validator” uri=“http://www.springmodules.org/tags/commons-validator” %>
|
cs |
2-2) 필요한 자바 스크립트 함수를 generate 하기 위한 코드를 추가 한다. validation-rules.xml에서 선언한 함수를 불러 오기 위해, 위에서 작성한 validator.jsp를 아래와 같이 호출한다.
1
|
<script type="text/javascript" src="<c:url value="/zzz/aaa/validator.do"/>"></script>
|
cs |
2-3) 위의 자바 스크립트 함수를 이용해 필요한 validation과 메시지 처리를 위한 자바 스크립트를 generate 하기 위한 코드를 추가 한다. formName에는 validator.xml에서 정의한 form의 이름을 써준다.
1
|
<validator:javascript formName="aaaaVO" staticJavascript="false" xhtml="true" cdata="false"/>
|
cs |
2-4) form submit시에 validateVO클래스명() 함수를 호출한다. 예제는 아래와 같다.
1
2
3
4
5
|
<form:form commandName="searchVO" name="aaaaVO" method="post" action="${pageContext.request.contextPath}/zzz/insertAaaa.do" onsubmit="return fn_egov_save();" >
.
.
.
</form:form
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<script type="text/javascript">
function fn_egov_save(){
var varForm = document.aaaaVO;
if(confirm("<spring:message code='common.save.msg' />")){
if(!validateAaaaVO(varForm)){
return false;
}else{
varForm.submit();
}
}
}
</script>
|
cs |
3) 웹브라우저를 열어서 submit 을 실행.
- alert 창으로 동일한 메세지가 출력된다.
이로써 Server-Side와 Client-Side상에서 동일한 로직으로 validation을 체크하는 방법을 생각해봤다. 이제 시작이라 고민해볼 요소들이 더 존재한다.
'전자정부표준프레임워크' 카테고리의 다른 글
이클립스 초기 설정 (0) | 2020.09.22 |
---|---|
전자정부표준프레임워크 paging 추가하기 (1) | 2020.09.17 |
JSP 커스텀 태그 (JSP Custom Tag) 예제 (0) | 2020.09.14 |
전자정부표준프레임워크 validation Rule 추가 (0) | 2020.09.09 |
RedirectAttributes(redirect 객체 전달) (0) | 2020.09.03 |
Redirect와 Forward 의 차이 (0) | 2020.09.03 |
spring JSP Tag Library (0) | 2020.08.31 |
spring-form JSP Tag Library (0) | 2020.08.31 |