关于struts Validator在多模块下多国语言资源访问的问题解决之道(一)struts Validator下使用多模块的多国语言资源

来源:互联网 发布:魔兽数据库手机版 编辑:程序博客网 时间:2024/06/02 15:14

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

 

原创粉丝点击