출처: http://dojeun.egloos.com/317876 (제갈장비)
작업순서
1. 액션폼빈에Validator처리를 행한다는 기술을 한다.
2. 액션폼빈의 각 속성에 적용할Validator룰을 validation.xml에 기술한다.
Validator자체의 동작은 validator-rules.xml에 정의된다. validator-rules.xml은 사전에 정의되어 있는 것을 사용한다.
3. 메세지 리소스 파일에validation.xml의 룰에 만족하지 않았을 때표시할 에러메세지를 기술한다.
4. 에러 메세지를 표시하기위한 JSP프로그램을 작성한다.
5. struts-config.xml에 Validator관련 설정을 한다.
<?xml:namespace prefix = o />
1. 어플리케이션 폼빈 작성
//ExValidatorForm.java
package struts;
import org.apache.struts.validator.*;
import org.apache.struts.action.*;
//Validator를 사용하는 경우는ValidatorForm클래스를 계승합니다.
//그 외는 일반적인 어플리케이션 폼빈의 작성방법과 같습니다.
public final class ExValidatorForm extends ValidatorForm {
private String requireV;
private String validwhenV;
private String countV;
private String patternV;
private String dateV;
private String rangeV;
private String emailV;
public void setRequireV(String requireV)
{this.requireV = requireV;}
public void setValidwhenV(String validwhenV)
{this.validwhenV = validwhenV;}
public void setCountV(String countV)
{this.countV = countV;}
public void setPatternV(String patternV)
{this.patternV = patternV;}
public void setDateV(String dateV)
{this.dateV = dateV;}
public void setRangeV(String rangeV)
{this.rangeV = rangeV;}
public void setEmailV(String emailV)
{this.emailV = emailV;}
public String getRequireV() {return requireV;}
public String getValidwhenV() {return validwhenV;}
public String getCountV() {return countV;}
public String getPatternV() {return patternV;}
public String getDateV() {return dateV;}
public String getRangeV() {return rangeV;}
public String getEmailV() {return emailV;}
}
2. validation.xml 작성
//validation.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//
DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<!-- 적용할 어플리케이션 폼빈을 논리명으로 지정 -->
<form name="ExValidator">
<!-- required 룰 지정 -->
<field property="requireV" depends="required">
</field>
<!-- validwhen룰 지정
validwhen의 조건식을 test변수로 지정
*this*는 프로퍼티 validwhenV를 나타냄 -->
<field property="validwhenV" depends="validwhen">
<msg name="validwhen" key="errors.validwhen" />
<var>
<var-name>test</var-name>
<var-value>
((*this* != null) and (countV != null))
</var-value>
</var>
</field>
<!-- minlength룰 지정
minlength변수로 조건의 최저입력수를 지정 -->
<field property="countV" depends="minlength">
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
</field>
<!-- mask룰 지정
mask변수로 조건패턴을 지정 -->
<field property="patternV" depends="mask">
<var>
<var-name>mask</var-name>
<var-value>^[a-zA-Z]*$</var-value>
</var>
</field>
<!-- date룰 지정
datePattern변수로 조건의 일자 패턴을 지정 -->
<field property="dateV" depends="date">
<msg name="date" key="errors.date" />
<var>
<var-name>datePattern</var-name>
<var-value>yyyy/mm/dd</var-value>
</var>
</field>
<!-- intRange 룰 지정
max변수, min변수로 조건의 범위를 지정 -->
<field property="rangeV" depends="intRange">
<var>
<var-name>min</var-name>
<var-value>4</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>16</var-value>
</var>
</field>
<!-- email 룰 지정 -->
<field property="emailV" depends="email">
</field>
</form>
</formset>
</form-validation>
3. 메세지 리소스 파일 작성
//application.properties
errors.required =requireV is wrong.<br>
errors.validwhen=validwhenV is wrong.<br>
errors.minlength=countV is wrong.<br>
errors.invalid =patternV is wrong.<br>
errors.date =dateV is wrong.<br>
errors.range =rangeV is wrong.<br>
errors.email =emailV is wrong.<br>
4. JSP 작성
//error.jsp Validator룰에 만족하지 않았을 때에 표시할 에러화면
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<html:html>
<head><title>에러화면</title></head>
<body>
에러 메세지
<br>
<%-- <html:messages>태그로 에러 메세지를 표시합니다.
에러 메세지를 표시할 때는message속성을 false로 합니다. --%>
<html:messages id="msg" message="false">
<%-- filter속성을 false로 함으로써 메세지에
HTML태그를 쓸 수 있습니다. True로 하면 HTML태그가 있는 경우 치환문자(<, > 등)으로 변환됩니다. --%>
<bean:write name="msg" ignore="true" filter="false"/>
</html:messages>
</body>
</html:html>
//exValidator.jsp Validator체크를 하는데 사용될 입력폼 화면
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html>
<head><title>Validator처리</title></head>
<body>
<html:form action="/ExValidator">
필수입력
<br>
<html:text property="requireV" size="16"/>
<br><br>
validwhen
<br>
<html:text property="validwhenV" size="16"/>
<br><br>
문자수확인
<br>
<html:text property="countV" size="16"/>
<br><br>
패턴확인
<br>
<html:text property="patternV" size="16"/>
<br><br>
일자확인
<br>
<html:text property="dateV" size="16"/>
<br><br>
범위확인
<br>
<html:text property="rangeV" size="16"/>
<br><br>
메일 어드레스 확인
<br>
<html:text property="emailV" size="16"/>
<br><br>
<html:submit property="submit" value="송신"/>
</html:form>
</body>
</html:html>
5. struts-config.xml 작성
//struts-config.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<!-- 액션폼빈 지정 -->
<form-beans>
<form-bean name="ExValidator"
type="struts.ExValidatorForm" />
</form-beans>
<!-- 액션 클래스 지정 -->
<action-mappings>
<!-- Validator를 사용하는 경우validate속성을 true로 지정.
Validator 에러를 표시할 화면을 input속성으로 지정 -->
<action path="/ExValidator"
type="struts.ExValidatorAction"
name="ExValidator"
scope="request"
validate="true"
input="/error.jsp">
<forward name="info" path="/exValidator2.jsp"/>
</action>
</action-mappings>
<!-- 메세지 리소스 파일 지정 -->
<message-resources parameter="resources.application"/>
<!-- Validator 지정. 프로퍼티 pathnames의 값에
validator-rules.xml과 validation.xml을 지정 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
---------------------------------------------------------------------------------------------------------------
응용처리
1. 복수조건지정
<file>태그의 depends속성에 값을 복수 지정함으로써 체크할 조건을 복수로 지정할 수 있습니다. email형식 체크와 필수입력 체크 등으로 조건을 조합하여 지정할 수 있습니다.
【depends속성에 복수조건 지정】
<!-- email형식 체크와 필수입력 체크를 지정 -->
<field property="emailV" depends="email,required">
</field>
2.에러 메세지에 변수를 사용
<field>태그에 <argn>태그(n은 0~3까지)를 지정함으로서 에러 메세지에 상황에 맞는 메세지 문자를 넣을 수 있습니다. 이 메세지 문자는 메세지 리소스 파일을 이용하여 지정할 수 있거나, 직접 넣거나, <var>태그의 변수지정으로 넣을 수 있습니다.
직접 넣거나, <var>태그의 변수를 지정하는 경우에는 <argn>태그의 리소스 속성을 “false”로 해야 합니다.
【<argn>태그 지정】
・・・・・
<field property="countV" depends="minlength">
<!-- 메세지에 "minlength.msg"을 지정 -->
<arg0 key="minlength.msg" />
<!-- <var>태그를 이용하여 minlength를 지정 -->
<arg1 key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
</field>
・・・・・
【메세지 리소스 파일】
errors.minlength={0} needs over {1} characters.
minlength.msg=minlength
3.메세지 리소스 파일의 키를 지정
<field>태그에 <msg>태그를 지정함으로서 참조되는 메세지 리소스 파일의
키를 변경할 수가 있다.
【<msg>태그 지정】
・・・・・
<field property="requireV" depends="required">
<!--에러시의 메세지 리소스 파일의 키를
"errors.original.required" 로 변경-->
<msg name="required" key="errors.original.required" />
</field>
・・・・・
4.동적 액션폼빈에Validator를 사용
동적 액션폼빈에 Validator를 사용할 수 있다.
struts-config.xml의 태그의 타입속성에DynaValidatorForm을 지정하는 것만으로 사용할 수 있다.
다른 부분은 액션폼빈의Validator 사용방법과 동일하다.
【<form-bean>태그에 DynaValidatorFrom을 지정】
・・・・・
<form-beans>
<!-- type속성에 DynaValidatorForm을 지정 -->
<form-bean
name="DynaForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property
name="requireV"
type="java.lang.String" />
</form-bean>
</form-beans>
<action-mappings>
<action path="/ExValidator"
type="struts.ExValidatorAction"
name="DynaForm"
scope="request"
validate="true"
input="/error.jsp">
<forward name="info" path="/exValidator2.jsp"/>
</action>
</action-mappings>
출처: http://dojeun.egloos.com/317876 (제갈장비)
작업순서
1. 액션폼빈에Validator처리를 행한다는 기술을 한다.
2. 액션폼빈의 각 속성에 적용할Validator룰을 validation.xml에 기술한다.
Validator자체의 동작은 validator-rules.xml에 정의된다. validator-rules.xml은 사전에 정의되어 있는 것을 사용한다.
3. 메세지 리소스 파일에validation.xml의 룰에 만족하지 않았을 때표시할 에러메세지를 기술한다.
4. 에러 메세지를 표시하기위한 JSP프로그램을 작성한다.
5. struts-config.xml에 Validator관련 설정을 한다.
<?xml:namespace prefix = o />
1. 어플리케이션 폼빈 작성
//ExValidatorForm.java
package struts;
import org.apache.struts.validator.*;
import org.apache.struts.action.*;
//Validator를 사용하는 경우는ValidatorForm클래스를 계승합니다.
//그 외는 일반적인 어플리케이션 폼빈의 작성방법과 같습니다.
public final class ExValidatorForm extends ValidatorForm {
private String requireV;
private String validwhenV;
private String countV;
private String patternV;
private String dateV;
private String rangeV;
private String emailV;
public void setRequireV(String requireV)
{this.requireV = requireV;}
public void setValidwhenV(String validwhenV)
{this.validwhenV = validwhenV;}
public void setCountV(String countV)
{this.countV = countV;}
public void setPatternV(String patternV)
{this.patternV = patternV;}
public void setDateV(String dateV)
{this.dateV = dateV;}
public void setRangeV(String rangeV)
{this.rangeV = rangeV;}
public void setEmailV(String emailV)
{this.emailV = emailV;}
public String getRequireV() {return requireV;}
public String getValidwhenV() {return validwhenV;}
public String getCountV() {return countV;}
public String getPatternV() {return patternV;}
public String getDateV() {return dateV;}
public String getRangeV() {return rangeV;}
public String getEmailV() {return emailV;}
}
2. validation.xml 작성
//validation.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//
DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<!-- 적용할 어플리케이션 폼빈을 논리명으로 지정 -->
<form name="ExValidator">
<!-- required 룰 지정 -->
<field property="requireV" depends="required">
</field>
<!-- validwhen룰 지정
validwhen의 조건식을 test변수로 지정
*this*는 프로퍼티 validwhenV를 나타냄 -->
<field property="validwhenV" depends="validwhen">
<msg name="validwhen" key="errors.validwhen" />
<var>
<var-name>test</var-name>
<var-value>
((*this* != null) and (countV != null))
</var-value>
</var>
</field>
<!-- minlength룰 지정
minlength변수로 조건의 최저입력수를 지정 -->
<field property="countV" depends="minlength">
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
</field>
<!-- mask룰 지정
mask변수로 조건패턴을 지정 -->
<field property="patternV" depends="mask">
<var>
<var-name>mask</var-name>
<var-value>^[a-zA-Z]*$</var-value>
</var>
</field>
<!-- date룰 지정
datePattern변수로 조건의 일자 패턴을 지정 -->
<field property="dateV" depends="date">
<msg name="date" key="errors.date" />
<var>
<var-name>datePattern</var-name>
<var-value>yyyy/mm/dd</var-value>
</var>
</field>
<!-- intRange 룰 지정
max변수, min변수로 조건의 범위를 지정 -->
<field property="rangeV" depends="intRange">
<var>
<var-name>min</var-name>
<var-value>4</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>16</var-value>
</var>
</field>
<!-- email 룰 지정 -->
<field property="emailV" depends="email">
</field>
</form>
</formset>
</form-validation>
3. 메세지 리소스 파일 작성
//application.properties
errors.required =requireV is wrong.<br>
errors.validwhen=validwhenV is wrong.<br>
errors.minlength=countV is wrong.<br>
errors.invalid =patternV is wrong.<br>
errors.date =dateV is wrong.<br>
errors.range =rangeV is wrong.<br>
errors.email =emailV is wrong.<br>
4. JSP 작성
//error.jsp Validator룰에 만족하지 않았을 때에 표시할 에러화면
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<html:html>
<head><title>에러화면</title></head>
<body>
에러 메세지
<br>
<%-- <html:messages>태그로 에러 메세지를 표시합니다.
에러 메세지를 표시할 때는message속성을 false로 합니다. --%>
<html:messages id="msg" message="false">
<%-- filter속성을 false로 함으로써 메세지에
HTML태그를 쓸 수 있습니다. True로 하면 HTML태그가 있는 경우 치환문자(<, > 등)으로 변환됩니다. --%>
<bean:write name="msg" ignore="true" filter="false"/>
</html:messages>
</body>
</html:html>
//exValidator.jsp Validator체크를 하는데 사용될 입력폼 화면
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html>
<head><title>Validator처리</title></head>
<body>
<html:form action="/ExValidator">
필수입력
<br>
<html:text property="requireV" size="16"/>
<br><br>
validwhen
<br>
<html:text property="validwhenV" size="16"/>
<br><br>
문자수확인
<br>
<html:text property="countV" size="16"/>
<br><br>
패턴확인
<br>
<html:text property="patternV" size="16"/>
<br><br>
일자확인
<br>
<html:text property="dateV" size="16"/>
<br><br>
범위확인
<br>
<html:text property="rangeV" size="16"/>
<br><br>
메일 어드레스 확인
<br>
<html:text property="emailV" size="16"/>
<br><br>
<html:submit property="submit" value="송신"/>
</html:form>
</body>
</html:html>
5. struts-config.xml 작성
//struts-config.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<!-- 액션폼빈 지정 -->
<form-beans>
<form-bean name="ExValidator"
type="struts.ExValidatorForm" />
</form-beans>
<!-- 액션 클래스 지정 -->
<action-mappings>
<!-- Validator를 사용하는 경우validate속성을 true로 지정.
Validator 에러를 표시할 화면을 input속성으로 지정 -->
<action path="/ExValidator"
type="struts.ExValidatorAction"
name="ExValidator"
scope="request"
validate="true"
input="/error.jsp">
<forward name="info" path="/exValidator2.jsp"/>
</action>
</action-mappings>
<!-- 메세지 리소스 파일 지정 -->
<message-resources parameter="resources.application"/>
<!-- Validator 지정. 프로퍼티 pathnames의 값에
validator-rules.xml과 validation.xml을 지정 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
---------------------------------------------------------------------------------------------------------------
응용처리
1. 복수조건지정
<file>태그의 depends속성에 값을 복수 지정함으로써 체크할 조건을 복수로 지정할 수 있습니다. email형식 체크와 필수입력 체크 등으로 조건을 조합하여 지정할 수 있습니다.
【depends속성에 복수조건 지정】
<!-- email형식 체크와 필수입력 체크를 지정 -->
<field property="emailV" depends="email,required">
</field>
2.에러 메세지에 변수를 사용
<field>태그에 <argn>태그(n은 0~3까지)를 지정함으로서 에러 메세지에 상황에 맞는 메세지 문자를 넣을 수 있습니다. 이 메세지 문자는 메세지 리소스 파일을 이용하여 지정할 수 있거나, 직접 넣거나, <var>태그의 변수지정으로 넣을 수 있습니다.
직접 넣거나, <var>태그의 변수를 지정하는 경우에는 <argn>태그의 리소스 속성을 “false”로 해야 합니다.
【<argn>태그 지정】
・・・・・
<field property="countV" depends="minlength">
<!-- 메세지에 "minlength.msg"을 지정 -->
<arg0 key="minlength.msg" />
<!-- <var>태그를 이용하여 minlength를 지정 -->
<arg1 key="${var:minlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
</field>
・・・・・
【메세지 리소스 파일】
errors.minlength={0} needs over {1} characters.
minlength.msg=minlength
3.메세지 리소스 파일의 키를 지정
<field>태그에 <msg>태그를 지정함으로서 참조되는 메세지 리소스 파일의
키를 변경할 수가 있다.
【<msg>태그 지정】
・・・・・
<field property="requireV" depends="required">
<!--에러시의 메세지 리소스 파일의 키를
"errors.original.required" 로 변경-->
<msg name="required" key="errors.original.required" />
</field>
・・・・・
4.동적 액션폼빈에Validator를 사용
동적 액션폼빈에 Validator를 사용할 수 있다.
struts-config.xml의 태그의 타입속성에DynaValidatorForm을 지정하는 것만으로 사용할 수 있다.
다른 부분은 액션폼빈의Validator 사용방법과 동일하다.
【<form-bean>태그에 DynaValidatorFrom을 지정】
・・・・・
<form-beans>
<!-- type속성에 DynaValidatorForm을 지정 -->
<form-bean
name="DynaForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property
name="requireV"
type="java.lang.String" />
</form-bean>
</form-beans>
<action-mappings>
<action path="/ExValidator"
type="struts.ExValidatorAction"
name="DynaForm"
scope="request"
validate="true"
input="/error.jsp">
<forward name="info" path="/exValidator2.jsp"/>
</action>
</action-mappings>