Struts 2 валидатор

1

У меня проблема с установщиком struts2 (im new в struts2).

У меня есть две кнопки на моей странице, и каждый из них проверяет 2 правила общего доступа, а второй добавляет другое конкретное правило.

Вот моя конфигурация:

мое действие - VPJ001Action.java

struts.xml конфигурации struts.xml выглядит следующим образом:

 <action name="VPJ001" class="VPJ001Action">
     <result>/jsp/test.jsp</result>
 </action>
 <action name="VPJ001ValidationAction" method="validation" class="VPJ001Action">
     <result name="PAGE_VPJ002" type="chain">VPJ002!execute</result>
     <result>/jsp/test1.jsp</result>
 </action>
 <action name="VPJ001DiffusionMailAction" method="diffusionMail" class="VPJ001Action">
     <result>/jsp/test.jsp</result>
 </action>

моя первая кнопка вызывает VPJ001ValidationAction а вторая вызывает VPJ001DiffusionMailAction

моя настройка валидатора:

VPJ001Action-validation.xml содержит 2 общих правила:

<validators>
    <field name="bassin">
       <field-validator type="required">
         <message key="validation.bassin.requis"/>
       </field-validator>
    </field>
    <field name="moisAValider">
        <field-validator type="required">
           <message key="validation.mois.requis"/>
        </field-validator>
    </field>
</validators>

а также

VPJ001Action-VPJ001DiffusionMailAction-validation.xml содержит специальное правило:

<validators>
<field name="moisAValider">
    <field-validator type="regex" short-circuit="true">
          <param name="expression">.*[\*]$</param>
          <message key="validation.mois.valide"/>
     </field-validator>
</field>
</validators>

Вот результат:

когда я нажимаю на 2 кнопки, у меня есть всплывающее окно с правилом 2 общих прав, потому что я ничего не выбираю на странице, его работа прекрасна.

когда я выбираю басина и moisAValider, если я нажимаю кнопку подтверждения, все в порядке, im redirect на хорошей странице

когда я выбираю басина и moisAValider, если я нажимаю на diffusionMailbutton, страница обновляется, и всплывающее окно открыто с моим конкретным правилом (регулярное выражение не соблюдается), но страница была перезагружена!

Я хочу иметь этот сценарий:

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

и если я нажимаю на diffusionMailButton без выбора чего-либо, я хочу, чтобы всплывающее окно с 2 правилами общего пользования не соблюдалось и конкретное правило,

это возможно?

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

Спасибо за помощь!

  • 0
    Как вы могли бы нажать на 2 кнопки одновременно?
  • 0
    Где вы видите, я хочу нажать на 2 кнопки одновременно? Я говорю о двух разных кнопках. Кнопка проверки и кнопка рассылки почты;), и у каждого из них есть 2 валидатора общих, а во втором - проверка другого.
Показать ещё 5 комментариев
Теги:
validation
struts2

2 ответа

0
Лучший ответ

Я нашел свое решение.

Поскольку валидатор не делает то, что я хочу, я добавляю только 2 валидатора для двух кнопок (эти валидаторы являются проверкой на стороне клиента), и я добавляю еще один валидатор, используя <field-validator type="expression"> для вызова метода java, Этот метод проверяет запрошенное действие и возвращает true или false, когда это необходимо.

Последнее, когда этот метод возвращает false, я перенаправлен на jsp, и все мои selectbox обновлены и пустые, потому что, когда я отправляю свою форму, все списки не переходят на сервер. Мне нужно добавить скрытый ввод в мою форму со списком. Поскольку я использую List i, я сделал конвертер, который сериализует результат, чтобы иметь только один скрытый ввод:

<input type="hidden" name="listeBassinSurveillance" id="formulaireVPJ_listeBassinSurveillance" value="H4sIAAAAAAAAAJ2WS4/bVBTHbzJ5dR5tmCmdMtMBS0gVCCWTGdJ.....">

и когда я отправляю форму, значение десериализуется, и все значения помещаются в список в действии, поэтому, когда я обновляю jsp, все мои списки не пустые!

это кажется сложным, но очень простым и понятным.

Спасибо всем!

0

Кажется, что вы хотите проверить на стороне клиента, почему бы вам не использовать javascript или jquery для них, и ваша проблема будет решена. Я мог бы прокомментировать, но не могу. Ниже приведены ссылки для вашей справки.

проверка формы javascript

пример jquery

есть способ в struts2 с javascript ajax

в вашем struts.xml вы можете определить результат своего метода как: -

<result type="stream">
  <param name="contentType">text/html</param>
  <param name="inputName">inputStream</param>
 </result>

а затем в вашем методе действий вы можете проверить все, что хотите проверить, а затем, если эта проверка правильна, установите следующим образом:

this.setInputStream(new ByteArrayInputStream(SUCCESS.getBytes()));

и если проверка не удалась, тогда

this.setInputStream(new ByteArrayInputStream(ERROR.getBytes()));

это все со стойки бок. в вашей по форме отправьте в java-script, вы можете сделать несколько как это

$.ajax({
                        traditional: true,
                        type: "POST", 
                        url : ctxPath + "/yourActionName",
                        data : "yourField="+value,
                        dataType: "text",
                        success : function(data, success) {
                            if(data.indexOf("success")==-1){
                               alert("Action returned Error");
                                 return false;
                            }else{
                                alert("Action returned Success");

                            }
                        },
                    });
  • 0
    Я понимаю вашу точку зрения, но если Struts дают мне возможность сделать это, я хочу повторно использовать то же самое всплывающее окно, чтобы показать сообщение об ошибке, и тот же architectur для всех сообщений об ошибках. Если бы я не мог, я попробую с JQuery
  • 0
    Я отредактировал свой ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню