Повторное использование регулярного выражения в валидаторе XWork

Не создавая новый класс и не добавляя его в качестве типа валидатора, я хотел бы повторно использовать некоторые регулярные выражения в XWork.

Я не могу найти учебник онлайн с правильным синтаксисом. Я хотел бы изменить следующее:

<field name="example">
    <field-validator type="regex">
       <param name="expression">[some ridiculously long regex expression like](0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)</param>
       <message key="example.error" />
    </field-validator>
</field>

что-то вроде:

 <regex-pattern>
   <name>date-regex-pattern</name>
   <expression>[some ridiculously long regex expression like](0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)</expression>
 </regex-pattern>

<field name="example">
    <field-validator type="regex">
       <param name="expression">{date-regex-pattern}</param>
       <message key="example.error" />
    </field-validator>
</field>

Или создайте новый тип валидатора поля в xml, связав другие существующие типы, например, обязательное поле с минимальной и максимальной длинами и регулярное выражение для передачи.

Каково правильное расположение для xml и синтаксиса в XWork?

1 ответ

Решение

Поместите свое выражение один раз в строку, предоставляемую методом get в BaseAction (действие, расширенное всеми остальными):

private final static ridiculouslyLongRegexExpression 
                  = "(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)";

public getRidiculouslyLongRegexExpression(){
    return ridiculouslyLongRegexExpression;
}

Затем вызовите его из ваших файлов XML, используя regexExpression:

<field name="example">
    <field-validator type="regex">
        <param name="regexExpression">${ridiculouslyLongRegexExpression}</param> 
    </field-validator>
</field>

Больше информации на официальной документации.

Другие вопросы по тегам