struts2 验证器表达式

标签 struts2

是否可以进行此条件表达式验证?:

(invitation.id==null and (newText==null or newText.isEmpty()))

我已经尝试了好几种方法,好几次了,但都没有实现。 此版本有效,但在服务器端,如果 invitation.id 为 null 或为空则忽略...有什么想法吗???:

<field name="newText">
   <field-validator type="fieldexpression">
      <param name="expression">!(invitation.id eq null and (newText eq null or newText.empty))</param>
      <message>${getText("validation.required")}</message>
   </field-validator>
</field>

http://struts.apache.org/release/2.2.x/docs/fieldexpression-validator.html

表达有什么问题??谢谢!

最佳答案

您的问题是您正在尝试将另一个字段 (invitation.id) 验证到 newText 字段验证器中(我不认为这是可能的,但我'我不确定)。

但是,您可以将其拆分为两个验证器,提出与失败情况相对应的消息,恕我直言,这是更正确的做法;

<field name="invitation.id">
    <field-validator type="required">
        <message>${getText("validation.invitation.id.required")}</message>
    </field-validator>
</field>

<field name="newText">
    <field-validator type="fieldexpression">
        <param name="expression">
           <![CDATA[                 
           newText != null && !newText.trim().empty())
           ]]>
        </param>
        <message>${getText("validation.newText.required")}</message>
    </field-validator>
</field>

,如果你需要修剪它,否则它会变得简单

<field name="invitation.id">
    <field-validator type="required">
        <message>${getText("validation.invitation.id.required")}</message>
    </field-validator>
</field>

<field name="newText">
    <field-validator type="requiredString">
        <message>${getText("validation.newText.required")}</message>
    </field-validator>
</field>

请注意,required 适用于所有非文本字段,而 requiredString 仅适用于文本字段。

Expression Validator 非常强大,但应该用于更复杂的目的:

例如,如果您想根据从您的 Action 中动态读取(通过 Getter)的另一个日期来验证日期;假设您之前选择了一个用户,并且您需要根据用户的开始和结束有效期间隔验证页面中的日期;但如果未插入日期,您也想通过验证,因为它已经由所需的验证器处理(因此您不会引发两条消息):

<field name="inputDate">
    <field-validator type="required">
       <message><![CDATA[ Input Date is mandatory ]]></message>
    </field-validator>
    <field-validator type="fieldexpression">
        <param name="expression"> 
            <![CDATA[ 
              inputDate==null || 
                (inputDate >= chosenUser.startValidity 
                 && 
                 inputDate <= chosenUser.EndValidity
                ) 
            ]]>            
        </param> 
        <message>
            <![CDATA[Input Date must be included in the User Validity interval 
               (from ${chosenUser.startValidity} to ${chosenUser.endValidity} ) 
            ]]>
        </message>
     </field-validator>
</field>

其中 chosenUser 是您的操作中的用户对象 (public User getChosenUser()) startValidity 和 endValidity 是 User 对象的属性 (public Date getEndValidity())。

正如您所见,动态读取也可以在消息中执行...这就是表达式验证器的强大之处;)

关于struts2 验证器表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838767/

相关文章:

java - 需要在Struts2和Spring中实现RESTful web服务

java - struts2 拦截器重定向两次以执行操作

java - 如何在 Struts 2 表单页面上添加 CSS

java - 如何分配 <s :property value ="a"> value to a jsp variable

java - Struts 2 - %{ } 符号的使用

java - Struts2 Jquery 网格不工作

html - Struts 2 插件 <s :submit> render html expression in label

java - @Column(nullable=false) 不工作

java - 如何使Struts2选择标签只读

java - Struts2 & Tiles : When apache. org 已关闭我的 webapp 无法启动