`
lzj520
  • 浏览: 213392 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

(转)Struts Validation 需要注意的细节

阅读更多

1. validation.xml 中的Resourse属性
------------------------------------------------------------------------------
     <field property="username" depends="maxlength">
        <arg0 name="maxlength" key="${var:maxlength}" resource="false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>10</var-value>
        </var>
      </field>
------------------------------------------------------------------------------

来,我们将它支解掉。:)  好象没有什么好说的。很简单。这是某个form下的一个properties的标准写法。其中我们要重视一下这句话: <arg0 name="maxlength" key="${var:maxlength}" resource="false" /> , resource属性指的是:是从资源文件里面读key的值吗? 
                                  if (resource == "false") {
                                        请取当前定义的变量的值。[因为为false的时候,因为得必须得给个值来组装错误信息,因为此时我们不会到消息资源文件里提取值]
                                  } else if (resource == "true) {
                                       请到资源文件里提取用来组装错误消息的值.
                                 }
你会问:如果我不指定resourse的值怎么样?默认是true,即:默认下它会去读properties文件里面的值。 (这似乎与java的boolean的默认是false有点违背),如果我没有配呢?那么是null.

当然我也做了一个实验证明了这点:

properties file tips
------------------------------------------------------------------------------
errors.maxlength = The length of the password can not surpass {0}
------------------------------------------------------------------------------
validation.xml tips :
------------------------------------------------------------------------------
     <field property="username" depends="maxlength">
        <arg0 name="maxlength" key="${var:maxlength}" resource="false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>10</var-value>
        </var>
      </field>
------------------------------------------------------------------------------
如果username的长度超过10的话,那么打印的是:The length of the password can not surpass 10

resouse属性改成true,
properties file tips
------------------------------------------------------------------------------
errors.maxlength = The length of the password can not surpass {0}
username.maxlength  = 10
------------------------------------------------------------------------------
validation.xml tips :
------------------------------------------------------------------------------
     <field property="username" depends="maxlength">
        <arg0 name="maxlength" key="username.maxlength" resource="true" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>10</var-value>
        </var>
      </field>
------------------------------------------------------------------------------
这样我们也能达到同样的效果。Right? 但是谁愿意呢? 只是我这样写似乎更加容易理解吧.并且这样做就失去了validation的某些特别的功效,你得为每个重新在资源文件里写一条message,不值得。

2. validation.xml 中的msg属性.
官方资料:[The default error message for a pluggable validator can be overriden with the msg element. So instead of using the msg attribute for the mask validator to generate the error message the msg attribute from the field will be used if the name of the field's name attribute matches the validator's name attribute.]后面的例子我也就没有给出来,那么这句话到底在肌理哇啦个什么呢? 先看一小段代码:
------------------------------------------------------------------------------------------------
<field property="username" depends="maxlength">
    <arg0 name="maxlength" key="${var:maxlength}" resource="false" />
    <var>
     <var-name>maxlength</var-name>
     <var-value>10</var-value>
    </var>
   </field>
------------------------------------------------------------------------------------------------
再强调一遍:validation的错误信息是这样组装的:通过arg0 - arg3等来和资源文件里面的并且消息名字在validator-rule.xml定义好的规则所对应的消息来合成的。validator-rule.xml所定义的msg是面向所有的该规则的错误消息,每个form field可以通过arg0-arg3来定制自己的消息(这个我提到过)

如果我们加入msg消息到filed标签下面:

------------------------------------------------------------------------------------------------
<field property="username" depends="maxlength">
    <msg name="maxlength" key="msg.maxlength" />
    <arg0 name="maxlength" key="${var:maxlength}" resource="false" />
    <var>
     <var-name>maxlength</var-name>
     <var-value>10</var-value>
    </var>
   </field>
------------------------------------------------------------------------------------------------
那么此时的maxlength在规则里面的msg将会被<field>里面的msg覆盖,也就是说<arg0>的定义形同虚设,更会无视resourse属性的false or true;

3.几个规则(rules)作用于同一个form的属性上面
------------------------------------------------------------------------------------------------
<field property="username" depends="required,maxlength,minlength">
    <arg0 name="maxlength" key="${var:maxlength}" resource="false" />
    <arg1 name="required" key="prompt.username" />
    <arg2 name="minlength" key="${var:minlength}" resource="false" />
    <var>
     <var-name>maxlength</var-name>
     <var-value>10</var-value>
    </var>
    <var>
     <var-name>minlength</var-name>
     <var-value>3</var-value>
    </var>
   </field>
------------------------------------------------------------------------------------------------
如果很多约束针对某一个form的属性,我们可以这样写,当然如果你非要分开写也可以。那么在xml文件中一个form的field就有多条记录.
这里有一点需要注意一下:<arg0><arg1><arg2>在这里定义了以后,别的form的属性也要按照这种顺序来,也就是:<arg0>对应的是 maxlength. <arg1>对应的是minlength.<arg2>对应的是 requried.为什么这样做?
因为在我们的properties文件中是写死的。如果不这样做,那么就会出现得到null值的错误啦.
------------------------------------------------------------------------------------------------
errors.required ={1} is required.
errors.maxlength = The length of the password can not surpass {0}
errors.minlength = The length of the password can not shorter than {2}
------------------------------------------------------------------------------------------------

补充一下validwhen的用法

<field property="emailAddress" depends="validwhen">

<arg0 key="userinfo.emailAddress.label"/>

<var>

<var-name>test</var-name>

<var-value>((sendNewsletter == null) or (*this* != null))</var-value>

</var>

</field>

上面定义的意思是:如果通讯地址是空或不空时这个字段时有效的

分享到:
评论

相关推荐

    struts2标签下的用户注册

    3. **验证(Validation)**:Struts2允许我们在Action类或XML配置文件中定义验证规则。例如,我们可以为每个字段添加非空、长度限制等验证。 4. **国际化(Internationalization, i18n)**:Struts2支持多语言,...

    Struts+Spring+Hibernate练习

    特别要注意的是,添加Validator插件和自定义的validation规则,以实现输入验证功能。 4. **国际化资源文件配置**:创建“ApplicationResources.properties”和“ApplicationResources_zh_CN.properties”文件,用于...

    SSHA环境的搭建.doc

    ### SSHA环境搭建详解 #### 一、概述 在软件开发过程中,为了构建高效稳定的应用系统,集成多种技术框架成为...在整个过程中,需要注意各个组件之间的协作与配置细节,以确保最终搭建的环境能够满足项目的实际需求。

    SSI框架搭建

    - **配置文件结构**:为了实现对用户输入的有效性检查,通常会在与Action类同级目录下创建一个特定格式的验证文件,例如`HelloWorldAction-validation.xml`。 ```xml &lt;param name="trim"&gt;true 用户名不能为...

    java面试问题汇总(非常全面)

    数据库设计中需要注意的问题 - 数据一致性。 - 表的关系设计。 - 索引优化。 - 安全性。 #### 36. 说出join的种类,以及各种join之间的区别 - **INNER JOIN**:返回两个表中匹配的行。 - **LEFT JOIN**/ **RIGHT ...

Global site tag (gtag.js) - Google Analytics