gpt4 book ai didi

java - Struts2 正则表达式验证负数问题

转载 作者:行者123 更新时间:2023-11-30 05:00:54 26 4
gpt4 key购买 nike

所有, 我正在尝试为 Struts2 操作编写简单的验证。我有一个字段必须包含 0 或正整数,因此我尝试使用 Struts2 内置正则表达式 validator 来完成此操作。我使用的正则表达式是 '^\d*$',我已经测试过 outside of struts2并相信它应该满足我的需求。 (例如,它匹配“23”,但不匹配“abc”或“-5”)。

但是,当我在 Struts2 中使用该正则表达式模式时,它无法给出负数的验证错误。

这是我的 struts2 验证 xml 片段:

<field name="editVO.capability.operationalQty">
<field-validator type="regex">
<param name="expression"><![CDATA[^\d*$]]></param>
<message key="errors.number"/>
</field-validator>
</field>

以下是我在对该验证进行单元测试时看到的一些结果:

Input  Validation Passes?  Expected Result?
23 Yes Yes
abc No Yes
-5 Yes No
%5 No Yes
5- No Yes
a5 No Yes

从上面的结果中可以看出,当我运行单元测试(或通过应用程序进行测试)时,当我输入“abc”或“5-”时,我收到一条错误消息(如预期),但是输入“-” 5' 不会触发验证失败。我不知道为什么它允许“-”字符通过,如果它是第一个字符。

我很感激任何与 Struts2 相关的正则表达式提示;请注意,我相信这里的错误是某种程度上与 Struts2 以及它如何处理正则表达式有关,而不仅仅是仅正则表达式的问题。 (fwiw - 当我尝试这种模式时,我也遇到了同样的问题:'^[0-9]*$')。

最佳答案

<field-validator type="regex">

这是一个字段 validator ,它要求已经设置了操作的字段才能工作,它不会对请求起作用。它的功能由验证拦截器提供。

要确认这一点,请参阅来源(实际上并没有那么糟糕):

验证拦截器在 struts-default.xml 中定义如下:

<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor

AnnotationValidationInterceptor 扩展 com.opensymphony.xwork2.validator.ValidationInterceptor

从 ValidationInterceptor 的开放 javadoc 中我们得到以下内容:

/**
* <!-- START SNIPPET: description -->
*
* This interceptor runs the action through the standard validation framework, which in turn checks the action against
* any validation rules (found in files such as <i>ActionClass-validation.xml</i>) and adds field-level and action-level
* error messages (provided that the action implements {@link com.opensymphony.xwork2.ValidationAware}). This interceptor
* is often one of the last (or second to last) interceptors applied in a stack, as it assumes that all values have
* already been set on the action.

这几乎概括了一切。

我认为您的测试用例仅通过类型转换来解释。我怀疑 params 正在删除字段错误,如果字段值已重置,则保留验证错误将没有任何意义。

结论:Struts2 正则表达式验证没有任何问题,至少在按预期方式使用时是这样。

关于java - Struts2 正则表达式验证负数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com