2014-02-18 4 views
0

Я написал ajax-вызов для вызова действия struts2, его по умолчанию будет выполнять метод, но не для какого-либо метода, определенного в struts.xml. Пожалуйста, скажите мне, как сформировать URL в JavaScript, чтобы вызвать правильное действие с методом, определенным в struts.xmlStruts2 url не ударил правильное действие

код:

function showCustomer(str) { 
    emailRequest = createRequest(); 
    if (emailRequest == null){ 
     alert("Unable to create request"); 
     }else{ 
     var emailValue = document.getElementById("email").value; 
     var email = escape(emailValue); 
     alert(email) 
     var url= "recoverPassword!recoverPassword?email="+email; 
     alert(url) 
     emailRequest.onreadystatechange = showemailStatus; 
     emailRequest.open("POST", url, true); 
     emailRequest.send(null); 
    } 
} 

function showemailStatus() { 
    if (emailRequest.readyState == 4) { 
     if (emailRequest.status == 200) { 
      if (emailRequest.responseText.match("EamilIdExists")) { 
       document.getElementById("show").style.display='block'; 
      } else { 
        document.getElementById("email").focus(); 
        alert("Email id doesnot exist"); 
        return; 
      } 
     } 
    } 
} 

struts.xml:

<action name="recoverPassword" class="com.astro.action.CheckEmailAction" method="recoverPassword"> 
      <result type="stream" name="success"> 
       <param name="contentType">text/html</param> 
       <param name="inputName">inputStream</param> 
      </result> 
      <result type="stream" name="input"> 
       <param name="contentType">text/html</param> 
       <param name="inputName">inputStream</param> 
      </result> 
     </action> 
+0

Кстати у вас есть ** никогда не принимал никакого ответа **. Когда ответ вам поможет, нажмите на белый знак 'V' в верхнем левом углу ответа, превратив его в зеленый. И вы, и ответчик получите очки репутации, и он сразу скажет будущим посетителям, что ответ был прав. Вы должны делать и свои старые ответы, когда они работали. –

ответ

0
  1. Изменение имени действия: один и тот же класс Action может быть объявлен несколько раз с несколькими именами, с (и без) различными методами. И когда вы меняете имя, вам больше не нужно использовать символ bang ! (Вызов динамического метода, который вы должны явно активировать на struts.xml, может привести к проблемам безопасности, поэтому было бы лучше избежать этого)

    Тогда вы могли бы

    <action class = "com.astro.action.CheckEmailAction" 
         name = "recoverPasswordAction" 
         method = "recoverPassword"> 
    ... 
    

    и

    <action class = "com.astro.action.CheckEmailAction" 
         name = "doSomethingElseAction" 
         method = "doSomethingElse"> 
    ... 
    

    (всегда помня о том, что действие не должно выполнять слишком много различных логических "действий")

  2. Затем, чтобы ввести его в javascript, используйте <s:url> (с пространством имен, если необходимо) и <s:param> (при необходимости). В вашем случае, ваши пары считываются во время выполнения со страницы, так что вам нужно, чтобы добавить его с JavaScript сгенерированной URL:

    var url = "<s:url action="recoverPasswordAction" />?email="+email; 
    
+0

спасибо andrea. У меня нет достаточного количества очков для голосования. –

+0

Вам нужно 15 очков репутации для ГОЛОСОВАНИЯ, но у вас уже достаточно репутации ACCEPT, пометив белый V в верхнем левом углу ответа. –

+0

Ваше решение не работает –

Смежные вопросы