Я пытаюсь использовать проверку Struts для проверки различных полей, вводимых пользователями. Если кто-либо может помочь мне видеть то, в чем я испытываю недостаток, я был бы чрезвычайно благодарен. Вот то, что я имею:
Я поместил validation.xml
и TestAction-validation.xml
в WEB-INF/classes/
Вот validation.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
. . .
</validators>
Вот TestAction-validation.xml
:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="testInt">
<field-validator type="int">
<param name="min">0</param>
<param name="max">9</param>
<message>Number not in range</message>
</field-validator>
</field>
<field name="testString">
<field-validator type="stringlength">
<param name="minLength">4</param>
<message>String not long enough.</message>
</field-validator>
</field>
</validators>
Мой struts.xml
расширяется struts-default
, и у меня есть чрезвычайно простой класс действия TestAction
который расширяется ActionSupport
и имеет поля testInt
и testString
.
Из того, что я читал, это должно быть достаточно, чтобы Struts проверил вводимые значения, но этого не происходит. Что я пропускаю?
У вас есть два варианта: проверка для каждой модели или для каждого действия. Для проверки на уровне Action вы просто создадите файл с именем {your action} -validation.xml и поместите его в тот же пакет, что и класс Action. Для проверки на уровне модели вы должны создать аналогичный файл, который принимает имя объекта модели, а затем направить файл проверки действия для проверки в соответствии с правилами в файле проверки модели.( Ссылка )
Поместите validation.xml в корень ваших исходных файлов Java (пакет по умолчанию) и поместите TestAction-validation.xml в тот же каталог, где находится ваш файл TestAction.java. Большинство IDE автоматически копируют все ресурсы в соответствующий каталог, где будет сгенерирован ваш файл класса.
Обновление:
Здесь может быть несколько моментов.
1) Вы используете стек перехватчиков по умолчанию - в этом стеке есть перехватчик валидации, который необходим для работы валидации, иначе вам придется указать перехватчик валидации вручную в вашем стеке.
2) TestAction-validation.xml должен находиться в WEB-INF/classes/[package], так что если action - com.foo.TestAction, то TestAction-validation.xml должен находиться в WEB-INF/classes/com/foo/TestAction-validation.xml
3) Попробуйте использовать имя метода, которому вы подчиняетесь в классе TestAction, в имени файла validator xml. Вы можете иметь TestAction-[method_to_be_validated]-validation.xml
Надеюсь, это поможет!