Цепочка валидаторов посетителей в Struts 2

Класс действий имеет свойство, которое необходимо проверить. Свойство является классом (MyClass1), одно из свойств которого также является классом (MyClass2).

Каждый из проверяемых классов будет использоваться несколькими действиями, поэтому я определил для каждого «MyClass*-validation.xml».

Проблема, с которой я сталкиваюсь, заключается в попытке использовать валидатор посетителей в MyClass1 для проверки MyClass2.

MyAction-validation.xml:

<validators>
    <field name="class1">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
</validators>

MyClass1-validation.xml:

<validators>
    <field name="class2">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
</validators>

MyClass2-validation.xml:

<validators>
    <field name="myInt">
        <field-validator type="conversion">
            <message>myInt conversion</message>
        </field-validator>
    </field>
</validators>

Если я отправлю форму с полем class1.class2.myInt="a", fieldErrors() не будет содержать ошибку преобразования, как я и ожидал.

Можно ли связать валидаторов посетителей бесконечно, или максимум один уровень посетителя? Если можно, то что я делаю не так?


Нежелательное (на мой взгляд) решение/обходной путь: поскольку я не мог понять, что я делаю неправильно, я в конце концов попытался не связывать проверку из MyClass1-validation.xml в MyClass2-validation.xml и вместо этого изменил определение MyAction. -проверка.xml:

<validators>
    <field name="class1.class2">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
    <field name="class1">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
</validators>

Это изменение решило проблему (fieldErrors() теперь содержит ошибку преобразования), но я бы предпочел иметь возможность связывать валидаторы в цепочку, как это было моим первоначальным намерением.


person Matt    schedule 08.05.2014    source источник
comment
+1, хороший вопрос. Обходной путь тот же, что я думал написать в ответе после прочтения нескольких строк вашего вопроса :)   -  person Andrea Ligios    schedule 08.05.2014
comment
Для этого я создал задачу jira: issues.apache.org/jira/browse/ WW-4346.   -  person Aleksandr M    schedule 15.05.2014


Ответы (1)


Да, на самом деле можно связывать visitors валидаторов на неопределенный срок. Валидатор conversion получает полное имя поля и проверяет, содержит ли карта ошибок преобразования это имя или нет. Проблема в том, что в случае нескольких связанных visitor валидаторов conversion валидатор не может получить фактическое полное имя поля (например, class1.class2.myInt).

Вы можете легко протестировать связывание валидаторов visitor с другим валидатором в файле MyClass2-validation.xml (например, валидатором int).

person Aleksandr M    schedule 08.05.2014
comment
Круто ... так что по умолчанию он уже поддерживает цепочку, и единственный валидатор, не работающий при подключении через посетителя, - это conversion? - person Andrea Ligios; 09.05.2014
comment
@AndreaLigios: Не могу точно сказать, что он единственный, но похоже на то. :) - person Aleksandr M; 09.05.2014
comment
Интересно знать, что другие упакованные валидаторы работают, к сожалению, этот не работает, но, по крайней мере, у меня есть обходной путь. Спасибо! - person Matt; 09.05.2014