태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[STRUTS]validator 기능 사용하기

정의 순서.

1.
 액션폼빈에Validator처리를 행한다는 기술을 한다.

2.
 액션폼빈의 각 속성에 적용할Validator룰을 validation.xml에 기술한다. Validator자체의 동작은 validator-rules.xml에 정의된다. validator-rules.xml은 사전에 정의되어 있는 것을 사용한다.

3.
 메세지 리소스 파일에validation.xml의 룰에 만족하지 않았을 때표시할 에러메세지를 기술한다.

4.
 에러 메세지를 표시하기위한 JSP프로그램을 작성한다.

5.
 struts-config.xml에 Validator관련 설정을 한다.
 


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="ISO-8859-1" ?>


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

top
    이전 댓글 더보기
  1. cheap oakley sunglasses 2012.07.18 10:58 신고 댓글주소 | 수정/삭제 | 댓글

    Believe that will see more such a good article to share.Your blog written

    in very real, very interesting, write the mood and feeling, watched was

    touched!

  2. louis vuitton 2012.07.25 12:25 신고 댓글주소 | 수정/삭제 | 댓글

    "The made-to-order concept is the ultimate luxury," Louis Vuitton Chief Executive Yves Carcelle told Reuters during a tour of the store, which the company calls a "maison".

  3. Jordan 4 Varsity Red 2012.07.25 17:25 신고 댓글주소 | 수정/삭제 | 댓글

    Part of the group of 10-speed bikes offered by the brand, http://www.fireredjordan4s.com/ are now known as multi-geared sport bikes that rose in popularity along with the bicycle boom during the 1960s. http://www.nikefoampositesforsale.org/ It is no surprise that this particular model and make rose in extreme popularity during this time and continues to be a popular choice of bicycle for many. http://www.jordan4firereds.com/ While most of the older models were 10-speed bikes, http://www.airyeezy2by.com/ today's models, which can be found in various Wal-Mart chains feature a light aluminum frame, http://www.jordans12obsidian2012.com/ wrap down handlebars and a Shimano 14-speed drive train with Shimano shifters. http://www.nikegiantsonline.com/
    http://www.jordanvii.com/ Jordan 7 Olympic
    http://www.jordan7olympiconlines.com/ Jordan 7 Olympic
    http://www.cheapretrojordans6olympic.com/ Jordan 6 Olympic
    http://www.jordans-6-olympic.com/ Jordan 6 Olympic

  4. louis vuitton 2012.07.26 12:07 신고 댓글주소 | 수정/삭제 | 댓글

    Louis Vuitton has been doing precisely that since the early 1990s. "Quite a few of our competitors thought we were mad," recalls Yves Carcelle, LV's exiting CEO. "I remember one telling me it would take a generation for a Chinese luxury customer to evolve.

  5. DD TAT .Glad that you enjoyed it dear, and your review was very 2012.07.27 12:14 신고 댓글주소 | 수정/삭제 | 댓글

    DD TAT .Glad that you enjoyed it dear, and your review was very well

    said. I'm happy I found it though .Thank author for it ,Please stay us up

    to date like this.

  6. louis vuitton 2012.07.27 17:58 신고 댓글주소 | 수정/삭제 | 댓글


    “In a world where companies are struggling with diving European demand and media are awash with bad news, luxury-goods companies like LVMH and PPR seem to be coming from another planet,” louis vuitton
    http://www.louissvuittonoutlethandbags.net
    http://www.cheap-louisvuittonoutlets.org
    http://www.louisvuittonoutlet-speedy.net
    http://www.louisvuitton-handbags-purses.net
    http://www.louisvuitton-lvoutlet.net
    http://www.louisvuittonoutlet-store-online.net
    http://www.louisvuitton-handbagso.com
    said Luca Solca, global head of European equities at CA Cheuvreux. “The revenue and profit performance of PPR and LVMH are very satisfying.”

  7. isabel marant sneakers 2012.08.01 15:34 신고 댓글주소 | 수정/삭제 | 댓글

    http://www.nflpackersfanshop.com/nike-aaron-rodgers-jersey Aaron Rodgers Jersey
    http://www.nflpackersfanshop.com/nike-clay-matthews-jersey Clay Matthews Jersey
    http://www.nflpackersfanshop.com/nike-jordy-nelson-jersey Jordy Nelson Jersey
    http://www.nflpackersfanshop.com/nike-donald-driver-jersey Donald Driver Jersey
    http://www.nflpackersfanshop.com/nike-bj-raji-jersey B.J. Raji Jersey
    http://www.nflpackersfanshop.com/nike-charles-woodson-jersey Charles Woodson Jersey
    http://www.nflpackersfanshop.com/nike-greg-jennings-jersey Greg Jennings Jersey
    http://www.nflpackersfanshop.com/nike-aj-hawk-jersey A.J. Hawk Jersey
    http://www.nflpackersfanshop.com/nike-randall-cobb-jersey Randall Cobb Jersey
    http://www.nflpackersfanshop.com/nike-jermichael-finley-jersey Jermichael Finley Jersey
    http://www.nflpackersfanshop.com/nike-john-kuhn-jersey John Kuhn Jersey
    http://www.nflpackersfanshop.com/nike-tramon-williams-jersey Tramon Williams Jersey
    http://www.nflpackersfanshop.com/nike-james-starks-jersey James Starks Jersey
    http://www.nflpackersfanshop.com/nike-jeff-saturday-jersey Jeff Saturday Jersey
    http://www.nflpackersfanshop.com/nike-nick-collins-jersey Nick Collins Jersey
    http://www.nflpackersfanshop.com/nike-ryan-grant-jersey Ryan Grant Jersey
    http://www.nflpackersfanshop.com/nike-desmond-bishop-jersey Desmond Bishop Jersey
    http://www.nflpackersfanshop.com/nike-tj-lang-jersey T.J. Lang Jersey
    http://www.nflpackersfanshop.com/nike-sam-shields-jersey Sam Shields Jersey
    http://www.nflpackersfanshop.com/nike-tim-masthay-jersey Tim Masthay Jersey

  8. burberry sale 2012.08.06 09:55 신고 댓글주소 | 수정/삭제 | 댓글

    Congratulations for posting such a useful blog. Your weblog is not only informative and also very artistic too. Keep up the great writing!!Thanks for sharing the information. Well, thank you!

  9. coach outlet 2012.08.11 11:24 신고 댓글주소 | 수정/삭제 | 댓글

    --!@zhanping Save old mayonnaise coach outlet and other large glass jars

    to use as containers for bath salts.

  10. air yeezy 2 for sale 2012.09.02 10:29 신고 댓글주소 | 수정/삭제 | 댓글

    http://wholesalejordansshoes.weebly.com/ wholesale jordans shoes
    http://jeamy888.tumblr.com/ jordan 7
    http://cheapjordanretro7.weebly.com/ jordan retro 7
    http://airyeezy2forsale.webeden.net air yeezy 2 for sale

  11. Supra Shoes 2012.09.04 16:08 신고 댓글주소 | 수정/삭제 | 댓글

    Supra Shoes take part in reflecting your good personality, choice and taste. The Supra TK Society Shoes should be your best choice this season. Special color and comfortable foot feeling and modern design style all are the primary cause. Add the good material and soft foot feeling, of course ,the competitive price, believe this Supra Vaider Shoes will add value for your life.

  12. vigRx oil 2012.09.10 18:42 신고 댓글주소 | 수정/삭제 | 댓글

    ED助勃:http://www.hellokanpou.com/CL02
    三鞭粒:http://www.hellokanpou.com/p/pro450.html
    九鞭粒:http://www.hellokanpou.com/p/pro437.html
    魔根:http://www.hellokanpou.com/p/pro360.html
    男宝:http://www.hellokanpou.com/p/pro375.html
    催淫:http://www.hellokanpou.com/CL05/37.html
    催情:http://hellokanpou.com/p/pro285.html
    狼一号:http://www.hellokanpou.com/p/pro330.html
    狼1号:http://www.hellokanpou.com/p/pro330.html
    西班牙蒼蝿水:http://www.hellokanpou.com/p/pro286.html
    三体牛鞭:http://www.hellokanpou.com/p/pro331.html
    三體牛鞭:http://www.hellokanpou.com/p/pro331.html
    韓国痩身一号:http://www.hellokanpou.com/p/pro50.html
    韓国痩身1号:http://www.hellokanpou.com/p/pro51.html
    ウェイカワン:http://www.hellokanpou.com/p/pro96.html
    肥滿:http://www.hellokanpou.com/p/pro3.html

  13. vigRx oil 2012.09.10 18:43 신고 댓글주소 | 수정/삭제 | 댓글

    ED助勃:http://www.hellokanpou.com/CL02
    三鞭粒:http://www.hellokanpou.com/p/pro450.html
    九鞭粒:http://www.hellokanpou.com/p/pro437.html
    魔根:http://www.hellokanpou.com/p/pro360.html
    男宝:http://www.hellokanpou.com/p/pro375.html
    催淫:http://www.hellokanpou.com/CL05/37.html
    催情:http://hellokanpou.com/p/pro285.html
    狼一号:http://www.hellokanpou.com/p/pro330.html
    狼1号:http://www.hellokanpou.com/p/pro330.html
    西班牙蒼蝿水:http://www.hellokanpou.com/p/pro286.html
    三体牛鞭:http://www.hellokanpou.com/p/pro331.html
    三體牛鞭:http://www.hellokanpou.com/p/pro331.html
    韓国痩身一号:http://www.hellokanpou.com/p/pro50.html
    韓国痩身1号:http://www.hellokanpou.com/p/pro51.html
    ウェイカワン:http://www.hellokanpou.com/p/pro96.html
    肥滿:http://www.hellokanpou.com/p/pro3.html

  14. 美人豹 2012.09.10 18:43 신고 댓글주소 | 수정/삭제 | 댓글

    Wenickman:http://www.xxkanpo.com/product/30.html
    キョジンバイゾウ:http://www.xxkanpo.com/product/38.html
    精力剤:http://www.xxkanpo.com/Energy/Energy.html
    強精剤:http://www.xxkanpo.com/product/37.html
    SPANISCHE FLIEGE:http://www.xxkanpo.com/product/10.html
    痩身一号:http://www.xxkanpo.com/product/367.html
    男露888:http://www.xxkanpo.com/product/345.html
    しんいちつぶしん:http://www.xxkanpo.com/product/465.html
    アリ王:http://www.xxkanpo.com/product/126.html
    狼一号:http://www.xxkanpo.com/product/62.html
    蒼蝿水:http://www.xxkanpo.com/product/251.html
    日本秀身堂:http://www.xxkanpo.com/product/221.html
    procomil spray:http://www.xxkanpo.com/product/32.html
    プロコミルスプレー:http://www.xxkanpo.com/product/32.html
    SUPERFATBURNING:http://www.xxkanpo.com/product/217.html
    FATBURNING:http://www.xxkanpo.com/product/434.html
    御秀堂:http://www.xxkanpo.com/product/164.html
    三便宝 激安:http://www.xxkanpo.com/product/349.html

  15. motivator 2012.09.10 18:43 신고 댓글주소 | 수정/삭제 | 댓글

    中絶薬:http://www.kanpoucom.com/hininn/42.html
    WENICKMAN:http://www.kanpoucom.com/product/140.html
    MAXMAN:http://www.kanpoucom.com/product/97.html
    ダイエット薬:http://www.kanpoucom.com/daietto/.html
    女欲霊:http://www.kanpoucom.com/product/485.html
    房事の神油:http://www.kanpoucom.com/product/451.html
    ベニクモ:http://www.kanpoucom.com/product/310.html
    D10 媚薬:http://www.kanpoucom.com/product/282.html
    花痴:http://www.kanpoucom.com/product/312.html
    法国性奴:http://www.kanpoucom.com/product/455.html
    Sex Slave:http://www.kanpoucom.com/product/455.html
    男露888:http://www.kanpoucom.com/product/243.html
    痩身一号:http://www.kanpoucom.com/product/51.html
    韓国痩身一号:http://www.kanpoucom.com/product/51.html
    韓国痩身1号:http://www.kanpoucom.com/product/51.html
    痩身1号:http://www.kanpoucom.com/product/51.html
    小情人:http://www.kanpoucom.com/product/343.html
    悍神:http://www.kanpoucom.com/product/473.html
    新曲美:http://www.kanpoucom.com/product/518.htm
    美人豹:http://www.kanpoucom.com/product/320.html
    ペニス増大:http://www.kanpoucom.com/product/97.html
    日本秀身堂:http://www.kanpoucom.com/product/145.html

  16. Coach Outlet Online 2012.09.19 11:37 신고 댓글주소 | 수정/삭제 | 댓글

    Coach Outlet Online

  17. Jordan 9 2012.09.28 18:05 신고 댓글주소 | 수정/삭제 | 댓글

    If you would go up high, then use your own legs ! Do not let yourselves carried aloft; do not seat yourselves on other people's backs and heads.<a href="http://www.jordan9.net">Jordan 9</a>
    <a href="http://www.jordan9.net">Jordan 9 For Sale</a>
    <a href="http://www.jordan9.net">Jordan 9 Retro</a>
    <a href="http://www.jordan9.net">Jordan Retro 9</a>
    <a href="http://www.michaelkorstotes.net/">Michael Kors Outlet</a>
    <a href="http://www.michaelkorstotes.net/">Michael Kors Handbags</a>
    <a href="http://www.michaelkorstotes.net/">Michael Kors Handbags On Sale</a>

  18. cheap ray ban sunglasses 2012.10.05 15:45 신고 댓글주소 | 수정/삭제 | 댓글

    cheap ray ban sunglasses

  19. true religion jeans outlet 2012.11.06 15:21 신고 댓글주소 | 수정/삭제 | 댓글

    true religion jeans outlet

  20. nalidou1 2012.12.15 15:28 신고 댓글주소 | 수정/삭제 | 댓글

    http://www.ghdstraightener-flatiron.net/ ghd iron
    http://www.ghdstraightener-flatiron.net/ ghd flat iron
    http://www.ghdstraightener-flatiron.net/ ghd hair
    http://www.ghdstraightener-flatiron.net/ ghd straightener
    http://www.ghdstraightener-flatiron.net/ flat iron ghd
    http://www.ghdstraightener-flatiron.net/ hair straightener
    http://www.ghdstraightener-flatiron.net/ ghd hair straightener
    http://www.ghdstraightener-flatiron.net/ ghd straighteners
    http://www.ghdstraightener-flatiron.net/ cheap ghd
    http://www.ghdstraightener-flatiron.net/ ghd hair iron
    ----------------------------------------------------------------------------------------------------------

    http://www.hairghdstraighteners-nz.net ghd nz
    http://www.hairghdstraighteners-nz.net ghd hair
    http://www.hairghdstraighteners-nz.net ghd straighteners
    http://www.hairghdstraighteners-nz.net ghd hair straighteners
    http://www.hairghdstraighteners-nz.net ghd
    http://www.hairghdstraighteners-nz.net ghd straighteners nz
    http://www.hairghdstraighteners-nz.net ghd new zealand
    http://www.hairghdstraighteners-nz.net cheap ghd straighteners
    http://www.hairghdstraighteners-nz.net ghd auckland
    http://www.hairghdstraighteners-nz.net hair straighteners ghd

Write a comment