Плагин struts 2 jquery устанавливает цель формы

Как можно установить цель <sj:submit> на вершину.

Поскольку пример страницы входа в систему должен открываться ПОСЛЕ завершения проверки базы ajax:

<s:form id="loginForm" action="login-process-result" namespace="/security" >

    <sj:submit button="true" 
        validateFunction="formValidator" validate="true" key="form.btn.login    />
</s:form>

Пробовал sj:submit targets и s:form target, ничего не помогло!

Я не хочу использовать s:submit, так как проверка формы должна выполняться через Ajax.


person Alireza Fattahi    schedule 15.12.2013    source источник
comment
что ты имеешь в виду под top ?   -  person coding_idiot    schedule 15.12.2013
comment
Я имею в виду цель формы ссылки, так как теперь целью может быть _balnk,_self,_parent,_top. Но я не знаю, как я могу установить это здесь. Я нашел некоторую работу, но надеюсь найти лучший ответ!   -  person Alireza Fattahi    schedule 16.12.2013


Ответы (3)


Поместите его в форму, а не в тег отправки:

<s:form action = "login-process-result" 
     namespace = "/security" 
            id = "loginForm" 
        target = "_top" >

Но ты уверен, что это то, чего ты хочешь? Посмотрите, как работает target="_top".

Судя по вашему описанию, нет.

person Andrea Ligios    schedule 16.12.2013
comment
Если я использую s: form, я теряю проверку ajax плагина jquery struts 2! - person Alireza Fattahi; 16.12.2013
comment
Вы УЖЕ используете s:form в своем коде. ? Кстати, а какие еще варианты? (кроме HTML-формы, это тоже работает)? - person Andrea Ligios; 16.12.2013
comment
Я допустил ошибку! Я имел в виду, что если я использую s: form с target = _top, я теряю проверку ajax плагина jquery struts 2! Как вы упомянули, target=_top работает, но когда вы используете его с проверкой jQuery Ajax, форма всегда нацелена на _top независимо от того, имеет ли форма действительный ввод или нет. Я пытаюсь выяснить, имеет ли фреймворк встроенную поддержку: продолжайте проверять форму через ajax и отправлять форму в _top, когда действие выполнено успешно. - person Alireza Fattahi; 16.12.2013

Я понятия не имею, почему вы требуете такого поведения.

Все, что я могу себе представить, это просто обновление определенной части страницы через Ajax с использованием плагина jquery struts2 для отправки формы, получения ответа и отправки его в DOM.

Вот что вы можете сделать:

  1. Отправить форму через ajax
  2. Выполните проверку на стороне сервера
  3. Сделайте так, чтобы возвращаемый ответ заполнил нужную область страницы.

Чтобы сделать это с помощью плагина Struts2 Jquery, вы можете использовать onCompleteTopics и onErrorTopics из sj:submit.

JSP

<s:form action="myAction">
<!-- form elements -->
<sj:submit onCompleteTopics="success" onErrorTopics="error"/>
</s:form>

Javascript

$.subscribe('success',function(event){
    var responseText=event.originalEvent.responseText;
});

Выше приведен непроверенный код, но я уверен, что он объясняет, как справиться с проблемой.

person coding_idiot    schedule 16.12.2013
comment
У меня есть идея, которую вы упомянули. Кстати, я не знаю, почему onErrorTopics никогда не публикуется! - person Alireza Fattahi; 16.12.2013

Чтобы следовать концепции struts2 jquery ajax validation и target, я использовал следующее решение:

Логин-form.jsp (цель не установлена):

<s:form id="loginForm" action="login-process-result" namespace="/security" >
    <sj:submit button="true" 
        validateFunction="formValidator" validate="true" key="form.btn.login    />
</s:form>

Действие (с проверками)

  @Action(value = "login-process-result")
  @Validations(requiredStrings={
          @RequiredStringValidator(fieldName="userID",key="validate.required"),
          @RequiredStringValidator(fieldName="password",key="validate.required")} )
  public String result() throws ClientException{

           //Authentication login goes here  
           return SUCCESS;
  }

И, наконец, форма результата, которая делает свое дело, представляет собой обычный jsp, который меняет расположение окна с помощью javascript.

Страница показывает сообщение об успешном завершении и делает небольшую задержку перед изменением URL-адреса, который является необязательным и может быть удален.

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

You have logged in successfully .... 
<br/>
<img src="images/loggin-in-progress.gif" />
<s:url var="url" action="private-page" namespace="/"/>

<script type="text/javascript">
    function reload() {
        window.location.href = "${url}";
    }

    $(document).ready(function() {
        setTimeout('reload()', 800);
    });

</script>
person Alireza Fattahi    schedule 17.12.2013