Почему проверка стойки не работает для меня? - PullRequest
8 голосов
/ 19 февраля 2010

Я пытаюсь использовать проверку 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, чтобы проверить введенные значения, но этого не происходит. Чего мне не хватает?

Ответы [ 4 ]

6 голосов
/ 25 февраля 2010

У вас есть два варианта: проверить для каждой модели или для каждого действия. Чтобы выполнить проверку на уровне Action, вы просто создадите файл с именем {your action} -validation.xml и поместите его в тот же пакет, что и класс Action. Для проверки на уровне модели вы должны создать аналогичный файл, который принимает имя объекта модели, а затем направить файл проверки действия для проверки в соответствии с правилами в файле проверки модели. ( Ссылка )

Поместите validation.xml в корень ваших исходных файлов Java (пакет по умолчанию) и поместите TestAction-validation.xml в ту же директорию, где находится ваш файл TestAction.java. Большинство IDE автоматически скопирует все ресурсы в соответствующий каталог, где будет сгенерирован ваш файл класса.

Обновление:

http://struts.apache.org/2.x/docs/validation.html

Как найти валидаторы действия

4 голосов
/ 27 апреля 2014

Замените "<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">" новым новым DTD

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

Это решение, оно будет работать.

4 голосов
/ 19 июня 2013

Может быть, потому что определение dtd

http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd

больше нет

При запуске Struts2 я получаю это исключение, и мои перехватчики проверки больше не работают

Line: 1436 - sun/net/www/protocol/http/HttpURLConnection.java:1436:-1
at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
at com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseValidatorDefinitions(DefaultValidatorFileParser.java:118)
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.retrieveValidatorConfiguration(DefaultValidatorFactory.java:195)
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.parseValidators(DefaultValidatorFactory.java:184)
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.<init>(DefaultValidatorFactory.java:55)

Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://opensymphony.com/xwork/xwork-validator-config-1.0.dtd
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
3 голосов
/ 22 февраля 2010

На моей голове может быть несколько вещей.

1) Используете ли вы стек перехватчиков по умолчанию - в этом стеке есть перехватчик валидации, который необходим для работы валидации, в противном случае вам необходимо вручную указать перехватчик валидации в вашем стеке.

2) TestAction-validation.xml должен находиться в WEB-INF / classes / [package], поэтому если действие com.foo.TestAction, тогда TestAction-validation.xml должно находиться в WEB-INF / classes / com / foo /TestAction-validation.xml

3) Попробуйте использовать имя метода, который вы отправляете в классе TestAction, в имени XML-файла валидатора. Вы можете иметь TestAction- [method_to_be_validated] -validation.xml

Надеюсь, это поможет!

...