본문 바로가기

JAVA를 잡아라!/Struts

Validwhen 용래

출처: 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태그가 있는 경우 치환문자(&lt;, &gt; )으로 변환됩니다. --%>

  <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태그가 있는 경우 치환문자(&lt;, &gt; )으로 변환됩니다. --%>

  <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>