天天看點

關于struts Validator在多子產品下多國語言資源通路的問題解決之道(一)struts Validator下使用多子產品的多國語言資源

struts Validator是一個非常優秀的驗證架構,但是在使用過程中我發現它對Struts多子產品下多國語言資源通路很不到位。

一、struts Validator下使用多子產品的多國語言資源

在struts中如果有一個子產品modelA,我們給其一個單獨的Struts-config配置檔案struts-config-modelA.xml,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>

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

 <data-sources />

 <form-beans>

  <form-bean name="ordersForm"

   type="modelA.OrdersForm" />

 </form-beans>

 <global-exceptions />

 <global-forwards></global-forwards>

 <action-mappings>

  <action name="ordersForm"

   path="/webapp/orders/ordersAction" scope="request"

   type="modelA.OrdersAction">

  </action>

 </action-mappings>

 <message-resources key="business"

  parameter="modelA.BusinessResources" />

 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

  <set-property property="pathnames" value="/WEB-INF/config/test-validation.xml,

                                                  /WEB-INF/config/validation.xml" />

   </plug-in>

</struts-config>

其中我們定義了一個簡單得form、Action以及一個key為business的多國語言資源,并注冊了驗證架構,它使用/WEB-INF/config/test-validation.xml檔案記錄要驗證的form的配置。

然後我們要在test-validation.xml定義ordersForm:

<?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="ordersForm">

   <field property="orderName" depends="required">

    <arg0 key="orders.orderName" />

   <msg key="errors.required" name="required" bundle="business"/>

   </field>

   <field property="orderDes" depends="required">

    <arg0 key="orders.orderDes" />

    <msg key="errors.required" name="required" bundle="business"/>

   </field>

   <field property="addUser" depends="required">

    <arg0 key="orders.addUser" />

    <msg key="errors.required" name="required" bundle="business"/>

   </field>

   <field property="addTime" depends="required">

    <arg0 key="orders.addTime" />

    <msg key="errors.required" name="required" bundle="business"/>

   </field>

  </form>

 </formset>

</form-validation>

大家可以看到在每個field中我們多定義了一個<msg key="errors.required" name="required" bundle="business"/>,這個就是定義目前子產品的required驗證綁定到哪一個資源檔案,這裡我們綁定到business。

最後我們要在jsp中為每一個字段定義驗證輸出标記:

<html:errors property="orderName" bundle="business"/>

這樣就可以實作多個子產品下的獨立多國語言配置。

大家也看到了,上面的步驟雖然不是很複雜,但每一個field都要定義一次msg,是一件多麼煩人的事情啊。我希望解除每一個field中的msg,轉而在struts-config配置中定義ValidatorPlugin的時候注冊資源綁定就可以了。是以我決定改造Validator。且聽下回分解:)

繼續閱讀