Проблема проверки регулярных выражений в Struts2 с отрицательными числами - PullRequest
1 голос
/ 20 июля 2011

Все, я пытаюсь написать то, что должно быть простой проверкой действия Struts2.У меня есть поле, которое должно содержать 0 или положительное целое число, поэтому я пытаюсь использовать встроенный валидатор регулярных выражений Struts2 для достижения этой цели.Я использую регулярное выражение '^ \ d * $', и я проверил это за пределами Struts2 и считаю, что оно должно соответствовать моим потребностям.(например, он соответствует «23», но не «abc» или «-5»).

Однако, когда я использую этот шаблон регулярных выражений в Struts2, он не выдает ошибку проверки для отрицательных чисел.

Вот мой фрагмент кода проверки Struts2:

<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] * $').

1 Ответ

2 голосов
/ 21 июля 2011
<field-validator type="regex">

Это валидатор поля, он требует, чтобы поле действия уже было установлено, чтобы оно работало, оно не будет работать против запроса.Его функциональность обеспечивается перехватчиком валидации.

Для подтверждения этого см. Источник (Это действительно неплохо):

Перехватчик валидации определен в struts-default.xml кактакие:

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

org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor

Расширение AnnotationValidationInterceptor расширяет com.opensymphony.xwork2.validator.VoridationInterter1014 *

Именно из начального Javadoc для ValidationInterceptor мы получаем следующее:

/**
 * <!-- 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 нет ничего плохого, по крайней мерепри использовании по назначению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...