8.4 ? Struts2 輸入校驗(yàn)器大全
在前幾節(jié)的輸入校驗(yàn)的配置文件中讀者應(yīng)該看到很多類型的 Struts2 的輸入校驗(yàn)器。下面就對(duì)這些輸入校驗(yàn)器做詳細(xì)介紹。
技術(shù)要點(diǎn)
介紹 Struts2 自帶的輸入校驗(yàn)器。
演示代碼
在 xwork-2.0.4.jar 包中,請(qǐng)讀者在 \com\opensymphony\xwork2\validator\validators 路徑下找一個(gè)名字為“ default.xml ”的 xml 文件。在該文件中有所有 Struts2 自帶的輸入校驗(yàn)器定義。具體代碼如下:
- <!-------------文件名: default .xml--------> ??
- ………… ??
- <validators> ??
- <validator?name= "required" ??
- class = "com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" /> ??
- <validator?name= "requiredstring" ??
- class = "com.opensymphony.xwork2.validator.validators.RequiredStringValidator" /> ??
- <validator?name= "int" ??
- class = "com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" /> ??
- <validator?name= "double" ??
- class = "com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" /> ??
- <validator?name= "date" ??
- class = "com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" /> ??
- <validator?name= "expression" ??
- class = "com.opensymphony.xwork2.validator.validators.ExpressionValidator" /> ??
- <validator?name= "fieldexpression" ??
- class = "com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" /> ??
- <validator?name= "email" ??
- class = "com.opensymphony.xwork2.validator.validators.EmailValidator" /> ??
- <validator?name= "url" ??
- class = "com.opensymphony.xwork2.validator.validators.URLValidator" /> ??
- <validator?name= "visitor" ??
- class = "com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" /> ??
- <validator?name= "conversion" ??
- class = "com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" /> ??
- <validator?name= "stringlength" ??
- class = "com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" /> ??
- <validator?name= "regex" ??
- class = "com.opensymphony.xwork2.validator.validators.RegexFieldValidator" /> ??
- </validators>??
<!-------------文件名:default.xml--------> ………… <validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> </validators>
?
以上代碼是所有 Struts2 輸入校驗(yàn)器的定義,下面將這些輸入校驗(yàn)器(一共有 13 個(gè))的字段和非字段格式的校驗(yàn)形式寫在如下,本例中沒有程序代碼示例,所有輸入校驗(yàn)器的應(yīng)用代碼都是筆者自己定義的。
- <!--?必填校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "required" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<message>請(qǐng)輸入數(shù)據(jù)</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "required" >??????????? ??
- ??????????<message>請(qǐng)輸入數(shù)據(jù)</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?必填字符串校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "requiredstring" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "trim" > true </param>???????????????? ??
- ??????<message>請(qǐng)輸入數(shù)據(jù)</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "requiredstring" > ??
- ??????????<param?name= "trim" > true </param>?????????? ??
- ??????????<message>請(qǐng)輸入數(shù)據(jù)</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?整數(shù)校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "int" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<param?name= "min" > 1 </param> ??
- ??????<param?name= "max" > 80 </param> ??
- ??????<message>數(shù)字必須在${min}-${max}歲之間</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "int" > ??
- ??????????<param?name= "min" > 1 </param> ??
- ??????????<param?name= "max" > 80 </param> ??
- ??????????<message>數(shù)字必須在${min}-${max}歲之間</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?浮點(diǎn)校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "double" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "minExclusive" > 0.1 </param> ??
- ??????<param?name= "maxExclusive" > 10.1 </param>??????????? ??
- ??????<message>輸入浮點(diǎn)無效</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "double" > ??
- ??????????<param?name= "minExclusive" > 0.1 </param> ??
- ??????????<param?name= "maxExclusive" > 10.1 </param>??????????? ??
- ??????????<message>輸入浮點(diǎn)無效</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?日期校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "date" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "min" > 2009 - 01 - 01 </param> ??
- ??????<param?name= "max" > 2019 - 01 - 01 </param> ??
- ??????<message>日期無效</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "date" > ??
- ?????????<param?name= "min" > 2009 - 01 - 01 </param> ??
- ?????????<param?name= "max" > 2019 - 01 - 01 </param> ??
- ?????????<message>日期無效</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?表達(dá)式校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "expression" > ??
- ??????<param?name= "expression" >password==repassword</param> ??
- ??????????<message>兩者輸入不一致</message> ??
- ??</validator> ??
- ? ??
- ??<!--?字段表達(dá)式校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "fieldexpression" > ??
- ??????<param?name= "expression" >password==repassword</param> ??
- ??????<message>兩者輸入不一致</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "fieldexpression" > ??
- ??????????<param?name= "expression" ><![CDATA[#password==#repassword]]></param> ??
- ??????????<message>兩者輸入不一致</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?郵件校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "email" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<message>非法郵件地址</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "email" > ??
- ??????????<message>非法郵件地址</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?網(wǎng)址校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "url" > ??
- ??????<param?name= "fidleName" >field</param>????????????? ??
- ??????<message>無效網(wǎng)址</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "url" >????????????? ??
- ??????????<message>無效網(wǎng)址</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?visitor校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "visitor" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "context" >fieldContext</param> ??
- ??????<param?name= "appendPrefix" > true </param>????????????? ??
- ??????<message>輸入校驗(yàn)</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "visitor" >???????????? ??
- ??????????<param?name= "context" >fieldContext</param> ??
- ??????????<param?name= "appendPrefix" > true </param>????????????? ??
- ??????????<message>輸入校驗(yàn)</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?類型轉(zhuǎn)換校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "conversion" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<message>類型轉(zhuǎn)換錯(cuò)誤</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "conversion" > ??
- ??????????<message>類型轉(zhuǎn)換錯(cuò)誤</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?字符串長度校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "stringlength" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "minLength" > 1 </param> ??
- ??????<param?name= "maxLength" > 10 </param> ??
- ??????<param?name= "trim" > true </param>???????????????? ??
- ??????<message>字符串長度必須為 10 位</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "stringlength" > ??
- ??????????<param?name= "minLength" > 1 </param> ??
- ??????????<param?name= "maxLength" > 10 </param> ??
- ??????????<param?name= "trim" > true </param>????????????? ??
- ??????????<message>字符串長度必須為 10 位</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?正則表達(dá)式校驗(yàn)?--> ??
- ??<!--?非字段校驗(yàn)?--> ??
- ??<validator?type= "regex" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<param?name= "expression" ><$/)]]></param> ??
- ??????<message>手機(jī)號(hào)碼必須為數(shù)字并且是 11 位</message> ??
- ??</validator> ??
- ??<!--?字段校驗(yàn)?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "regex" > ??
- ??????????<param?name= "expression" ><$/)]]></param> ??
- ??????????<message>手機(jī)號(hào)碼必須為數(shù)字并且是 11 位</message> ??
- ??????</field-validator> ??
- ??</field>??
<!-- 必填校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="required"> <param name="fidleName">field</param> <message>請(qǐng)輸入數(shù)據(jù)</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="required"> <message>請(qǐng)輸入數(shù)據(jù)</message> </field-validator> </field> <!-- 必填字符串校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="requiredstring"> <param name="fidleName">field</param> <param name="trim">true</param> <message>請(qǐng)輸入數(shù)據(jù)</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>請(qǐng)輸入數(shù)據(jù)</message> </field-validator> </field> <!-- 整數(shù)校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="int"> <param name="fidleName">field</param> <param name="min">1</param> <param name="max">80</param> <message>數(shù)字必須在${min}-${max}歲之間</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="int"> <param name="min">1</param> <param name="max">80</param> <message>數(shù)字必須在${min}-${max}歲之間</message> </field-validator> </field> <!-- 浮點(diǎn)校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="double"> <param name="fidleName">field</param> <param name="minExclusive">0.1</param> <param name="maxExclusive">10.1</param> <message>輸入浮點(diǎn)無效</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="double"> <param name="minExclusive">0.1</param> <param name="maxExclusive">10.1</param> <message>輸入浮點(diǎn)無效</message> </field-validator> </field> <!-- 日期校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="date"> <param name="fidleName">field</param> <param name="min">2009-01-01</param> <param name="max">2019-01-01</param> <message>日期無效</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="date"> <param name="min">2009-01-01</param> <param name="max">2019-01-01</param> <message>日期無效</message> </field-validator> </field> <!-- 表達(dá)式校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="expression"> <param name="expression">password==repassword</param> <message>兩者輸入不一致</message> </validator> <!-- 字段表達(dá)式校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="fieldexpression"> <param name="expression">password==repassword</param> <message>兩者輸入不一致</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[#password==#repassword]]></param> <message>兩者輸入不一致</message> </field-validator> </field> <!-- 郵件校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="email"> <param name="fidleName">field</param> <message>非法郵件地址</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="email"> <message>非法郵件地址</message> </field-validator> </field> <!-- 網(wǎng)址校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="url"> <param name="fidleName">field</param> <message>無效網(wǎng)址</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="url"> <message>無效網(wǎng)址</message> </field-validator> </field> <!-- visitor校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="visitor"> <param name="fidleName">field</param> <param name="context">fieldContext</param> <param name="appendPrefix">true</param> <message>輸入校驗(yàn)</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="visitor"> <param name="context">fieldContext</param> <param name="appendPrefix">true</param> <message>輸入校驗(yàn)</message> </field-validator> </field> <!-- 類型轉(zhuǎn)換校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="conversion"> <param name="fidleName">field</param> <message>類型轉(zhuǎn)換錯(cuò)誤</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="conversion"> <message>類型轉(zhuǎn)換錯(cuò)誤</message> </field-validator> </field> <!-- 字符串長度校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="stringlength"> <param name="fidleName">field</param> <param name="minLength">1</param> <param name="maxLength">10</param> <param name="trim">true</param> <message>字符串長度必須為10位</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="stringlength"> <param name="minLength">1</param> <param name="maxLength">10</param> <param name="trim">true</param> <message>字符串長度必須為10位</message> </field-validator> </field> <!-- 正則表達(dá)式校驗(yàn) --> <!-- 非字段校驗(yàn) --> <validator type="regex"> <param name="fidleName">field</param> <param name="expression"><$/)]]></param> <message>手機(jī)號(hào)碼必須為數(shù)字并且是11位</message> </validator> <!-- 字段校驗(yàn) --> <field name="field"> <field-validator type="regex"> <param name="expression"><$/)]]></param> <message>手機(jī)號(hào)碼必須為數(shù)字并且是11位</message> </field-validator> </field>
代碼解釋
( 1 )必填校驗(yàn)器 required 是用來判斷輸入的字段是否為空。如果未輸入任何數(shù)據(jù)則會(huì)顯示錯(cuò)誤信息。 fieldName 屬性是指定校驗(yàn)的字段名。這個(gè)屬性是所有 Struts2 自帶的輸入校驗(yàn)器都具有的屬性。因此介紹其他輸入校驗(yàn)器時(shí),筆者略過不談。但是讀者自己要知道該屬性是輸入校驗(yàn)器共有的。該校驗(yàn)器其他標(biāo)簽都和前幾章節(jié)中有過介紹,筆者也略過不談。
( 2 )必填字符串校驗(yàn)器 requiredstring 用來判斷輸入字段是否是 1 個(gè)非空字符串 。如果不是也顯示錯(cuò)誤信息。其中的 trim 屬性是在校驗(yàn)之前對(duì)字符串進(jìn)行處理。默認(rèn)是“ true ”。
( 3 )整數(shù)校驗(yàn)器 int 判斷輸入的字段數(shù)據(jù)是在一個(gè)整數(shù)范圍內(nèi)。 min 屬性是最小值, max 是最大值。 <message> 標(biāo)簽內(nèi)可用“ ${ 屬性名 } ”格式類表示他們具體的值。
( 4 )浮點(diǎn)校驗(yàn)器 double 是 t 判斷輸入的字段數(shù)據(jù)是在 1 個(gè)浮點(diǎn)數(shù)范圍內(nèi)。 minInclusive 表示這個(gè)范圍的最小值。 max Inclusive 表示這個(gè)范圍的最大值。還有 minExclusive 和 maxExclusive 兩個(gè)屬性,前者表明在浮點(diǎn)范圍之外的最小值,后者是在浮點(diǎn)范圍之外的最大值。
注意:以上四個(gè)屬性如果沒有聲明,則輸入校驗(yàn)不會(huì)去檢查。
( 5 )日期校驗(yàn)器 date 判斷輸入的字段的日期值是否在 1 個(gè)日期范圍內(nèi)。 min 是該范圍的最小值, max 是最大值。他們兩個(gè)屬性也和浮點(diǎn)校驗(yàn)器的四個(gè)屬性相同,如果沒有聲明則輸入校驗(yàn)不檢查。
( 6 )表達(dá)式校驗(yàn)器 expression 只有非字段校驗(yàn)格式。不能在字段校驗(yàn)中聲明。它的屬性也是 expression 。如代碼所示開發(fā)者可以使用 OGNL 表達(dá)式來定義校驗(yàn)規(guī)則。
( 7 )字段表達(dá)式校驗(yàn)器 fieldexpression 判斷字段是否滿足一個(gè)表達(dá)式。如代碼所示,當(dāng)用來判斷輸入的密碼和確認(rèn)密碼值是否一致就可以使用該校驗(yàn)器。它的屬性 expression 和表達(dá)式校驗(yàn)器相同。不過它可以用在字段校驗(yàn)中。
( 8 )郵件校驗(yàn)器 email 來判斷輸入的字段是 1 個(gè) email 時(shí)候是否符合 email 的格式。
( 9 )網(wǎng)址校驗(yàn)器 ur l 來判斷輸入的字段是 1 個(gè)網(wǎng)址時(shí)候是否符合網(wǎng)址的格式。
( 10 ) visitor 校驗(yàn)器就是判斷集合類型的字段。前面章節(jié)有所介紹。這里在重申一下 context 屬性是可以應(yīng)用的集合類型中元素對(duì)象的別名。 appendPrefix 屬性是指定在錯(cuò)誤信息中前面是否加上特定前綴。該前綴內(nèi)容可在 <message> 標(biāo)簽中定義。另外這兩個(gè)屬性也是沒有聲明時(shí)候,校驗(yàn)器不會(huì)去執(zhí)行檢查。
( 11 )類型轉(zhuǎn)換校驗(yàn)器 conversion 用來判斷輸入字段是否進(jìn)行類型轉(zhuǎn)換。它有 1 個(gè) repopulateField 屬性,如果為“ true ”表明如果發(fā)生類型轉(zhuǎn)換錯(cuò)誤,返回到 struts.xml 中指定的 Action 的 input 視圖界面時(shí)候還是否把原來錯(cuò)誤的輸入內(nèi)容顯示出來。“ false ”則相反。從這也可以看出筆者一直堅(jiān)持的觀點(diǎn)類型轉(zhuǎn)換也屬于輸入校驗(yàn)的一種是有理論依據(jù)的。
( 12 )字符串長度校驗(yàn)器 stringlength 用于判斷輸入的字符串長度是否是指定的長度范圍。其中 minLength 是最小字符串長度, maxLength 是最大字符串長度。 trim 屬性和上述必填字符串校驗(yàn)器 requiredstring 中 trim 屬性擁有相同功能。這三者也是屬于不聲明則不執(zhí)行檢查的可選屬性。
( 13 )正則表達(dá)式校驗(yàn)器 regex 檢查字段輸入值是否和 1 個(gè)正則表達(dá)式匹配。 expression 屬性中內(nèi)容就是該正則表達(dá)式。還有個(gè) caseSensitive 屬性,為“ true ”則表明匹配時(shí)候?qū)ψ帜复笮懨舾小7粗畡t不敏感。如代碼所示筆者用了 1 個(gè)判斷輸入的值是否是 11 位,全部由數(shù)字組成的正則表達(dá)式。對(duì)于輸入手機(jī)號(hào)碼數(shù)據(jù)的字段,該校驗(yàn)規(guī)則是最適用的。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
