2014-02-18 43 views
0

我已經寫了一個調用struts2動作的ajax調用,默認情況下它將執行方法,但不是用於struts.xml中定義的任何方法。請告訴我如何形成的JavaScript的URL調用與struts.xml中Struts2 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. 更改操作名稱:可以使用多個名稱多次聲明同一個操作類,並且使用(和不使用)不同的方法。而且當你改變名字時,你不必再使用!字符了(動態方法調用,那你必須在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

謝謝安德烈亞。我沒有足夠的聲望點投票。 –

+0

你需要15個聲望點給VOTE,但你已經有了足夠的聲望來接受,在答案的左上角標記白色V. –

+0

你的解決方案不起作用 –