天天看点

关于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。且听下回分解:)

继续阅读