分享

基本

 宾仔 2009-03-08

本文记录struts2主要的配置文件,存放位置,和注意点

(实际上,这些配置文件都是在class文件夹下起作用,不过凡是放在src文件夹下的,都会在eclipse编译时复制到对应的class文件夹。)

配置文件名       存放位置          备注

struts.xml                 src文件夹下           struts2默认配置文件

        

l 可通过<include>来包含别的struts配置文件。

l 在<package>中继承其他package可以拥有其他package的配置。

l 每个action最好加一个名为"input"的<result>,为出错默认的返回值

l 关于<package>的继承:

                   如果一个package要继承另一个package,则必须把另一个package所在的.xml配置文件include进来。只有一个例外,就是继承structs-default包时,不需要加载struts-default.xml。     因为struts.xml是默认包含了struts-default.xml。

                   在package继承时,package的先后是没有关系的,前面的package一样能继承后面的package

                   (貌似有本"权威指南"说这个还是拦截器配置,是顺序,有先后的,至少我的测试,package继承绝对没有先后之分)

                   请看一个例子,其中有三个配置文件:

                  struts-base.xml,struts-middle.xml,和struts.xml

 

                   struts-base.xml配置片断

 

<struts>

          
<package name="base" extends="struts-default" abstract="true">

           
</package>

 
</struts>

       struts-middle.xml配置片断

 

                   <struts>

                       
<package name="middle" extends="base" abstract="true">

             

                          
</package>

                   
</struts>
            struts.xml配置片断

 

         <struts>

                   
<package name="Registaction" extends="top">

                            
<action></action>

                   
</package>

                   
<package name="top" extends="middle">


                   
</package>

                   
<include file="struts-middle.xml"></include>

                   
<include file="struts-base.xml"></include>

         
</struts>

 

 可以看到struts.xml中的配置,package继承的顺序完全是和package定义的位置相反的,不过执行并没有问题。

                   另外注意一点,struts-base.xml中,名base的package直接继承了struts-default,而没有引入     struts-default.xml。 你可能会由此以为每个配置文件都会自动包含struts-default.xml。不过我个人认为,这是因为struts.xml中同时包括了struts-default.xml和struts-base.xml,这两个文件其实是在同一个配置文件中,所以base

struts.properties
      放在src      可免,通过struts.xml里面的constant元素配置

l 一些常用的属性:

struts.custom.properties :用户自定义属性文件,多个用逗号隔开

struts.devMode:是否处于开发模式,开发阶段可设true。

struts.i18n.reload:每次请求到达重新加载资源文件,开发阶段设true。

struts.ui.theme: 默认视图主题,默认为xhtml

struts.configuration.xml.reload :指定struts.xml改变后自动重新加载。默认false。

struts.custom.i18n.resources:指定struts2国际化资源文件。

struts.configuration.files:指定struts2默认加载的配置文件,该属性默认值为struts-default.xml,struts-plugin.xml,struts.xml

 

messageResource_language_COUNTRY.properties action同目录 本地化信息配置文件

 

XXXAcion-conversion.properties     action同目录   局部类型转换器配置

         aaaa(action中的属性名) = package.xxxconverter

        

xwork-conversion.properties     src文件夹下      全局类型转换器配置

         ttt(类型) = package.xxxConvertor

         Element_xxx=xxxType 对于没有泛型支持的list,collection

 

actionname-validation.xml   action同目录    action对应的验证配置,actionname action的类名

xwork-validation.xml         放在src           全局验证

关于验证有一点需留意,默认拦截器栈, conversionError拦截器配置都在validation拦截器之前。所以,在进行验证之前,conversionError拦截器会先调用转换器对页面上的属性进行转换,若转换器中抛出错误,会通过conversionError拦截器直接把错误信息返回页面,所以也不会经过validation了。这样一来,validation配置里面的友好的提示信息就换成了异常里面编程人员才看得懂的message了,对于用户而言不太好。

实际上validation拦截器所做的是服务器端验证,它只对action里面的属性定义的类型起作用,比如在action中某属性attrib1是 int型的,那么像正则表达式之类针对string的验证器就不会起作用,这和客户端验证不同之处在于,客户端验证把所有类型的输入都看作string.

 

所以,页面输入的验证,现在可以有3道。

l 第一道是仍然基于javascript的客户端验证

这一道其实也可以通过转换器来识别,转换器最先读入时,仍然是String型,因此可以在转换过程中对格式进行验证。

l 第二道是转换器转换时的验证(其实是抛出转换异常,也可以当作输入格式上的验证)

这一道,默认的输出message比较不友好,不过可以通过在messageResource资源文件中配置这两个键值加入自己的信息:

1.       Xwork.default.invalid.fieldvalue   默认类型转换失败信息

2.       Xwork.fieldvalue.属性名 指定属性名的类型转换失败信息。

l 第三道是validation配置文件配置的服务器端验证。

这些验证类型名可以通过看xwork-x-x.jar中com.opensymphony.xwork2.validator.validators包内的default.xml看到

还是得强调下,服务器端验证主要关注的不是参数的格式,而是参数的实际内容,服务器端验证格式反而很不方便。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多