Struts Validation Framework не работает - PullRequest
1 голос
/ 28 сентября 2011

Я пытаюсь проверить форму с помощью структуры проверки Struts, но проверка, похоже, обходит стороной. У меня есть все настройки валидации в validation.xml.

У меня также есть несколько пользовательских проверок формы в методе validate() формы, которые работают нормально.

Я установил validate="false" в отображении действия и вызвал проверку формы явно из действия doPerform()

Я на Struts 1.

Вот код:

Внутри действия

if(validationPassed(changeForm, mapping, request)){
 if( !(changeForm.getResultAction().equals("add")) )
   if(!businessValidationsPassed(changeForm, request))
     errorFlag = true;
   }
   else{
        errorFlag = true;
   }

private boolean validationPassed(MultiChangeForm form, ActionMapping mapping, HttpServletRequest request ) {

  ActionErrors errors =  form.validate(mapping, request);
    if (!errors.isEmpty()) {
        saveErrors(request, errors);
        return false;
    }
    else
        return true;

}

распорка-config.xml

<action path="/multiController"
            type="com.multi.action.MultiControllerAction"
            name="MultiChangeForm"  
            scope="session"
            input="multiUpdateResult.def"
            validate="false">
   <forward name="success" path="/forward/initProcess/cam/multiUpdateResultDef.do"/> 
        <forward name="failure" path="/forward/initProcess/cam/multiUpdateResultDef.do"/>
        <forward name="error" path="/forward/initProcess/cam/errorDef.do"/>

</action>

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames"
                  value="/WEB-INF/multi/validator-rules.xml,/WEB-INF/multi/validation.xml"/>
</plug-in>

проверка формы ()

ActionErrors errors =  super.validate(actionMapping, request);
// custom validations: running ok

Я что-то упустил здесь? Любые идеи были бы действительно хороши.

Спасибо

Сахил

Ответы [ 4 ]

2 голосов
/ 28 сентября 2011

Кажется, вы смешали метод проверки и структуру валидатора.

Для метода validate нам не нужны никакие правила проверки (нет необходимости в xmls). Просто мы можем написать метод проверки в formBean классе и добавить ошибки в ActionErrors объект.

Платформа Validator (xmls) используется для проверки на стороне клиента. В JSP мы предоставляем правила, такие как mask или intRange, FloatRange, проверка электронной почты ..

1 голос
/ 29 сентября 2011

При сбое проверки формы вы отправляетесь на страницу input, указанную в теге <action>, поэтому я не знаю, почему вы вызываете метод проверки вручную.

В любом случае .... я подозреваю, что ваша MultiChangeForm форма расширяется ActionForm, хотя на самом деле она должна расширяться ValidatorForm.

Вы расширяете ValidatorForm?

0 голосов
/ 18 июля 2013

Основная причина возникновения этой проблемы заключается в том, что версия validator-rules.xml не соответствует текущей версии Struts.когда мы обновляем текущую версию Struts, мы можем оставить validator-rules.xml без изменений.Ниже ссылка объясняет то же самое.

http://comments.gmane.org/gmane.comp.jakarta.struts.user/137543

В моем случае я использую распорки 1.1.Но я скачал validator-rules.xml с какого-то внешнего сайта и использовал его, который не совместим с моей версией Struts.

Следовательно, в качестве первого шага решения найдите Struts.jar, используемый в вашем приложении, иоткройте файл манифеста и выясните, какая версия Struts используется.Поскольку даже в версии 1.2 у нас может быть так много вариантов, мы хотим найти точный validator-rules.xml.Во-вторых, получите соответствующий validator-rules.xml, загрузив распорки по указанной ниже ссылке, и используйте validator-rules.xml в своем приложении

http://archive.apache.org/dist/struts/

0 голосов
/ 01 октября 2011

Выяснил, почему validation.xml обошли стороной.Я добавил несколько комментариев в файл.Внимательно изучив консоль сервера при развертывании приложения, я обнаружил, что серверу не удалось проанализировать xml из-за вышеуказанного тега.

...