2011-06-21 75 views
0

我無法使用的struts2當我手動提交表單而不是形式的行動struts2的重定向到另一頁

我struts.xml的一部分

<action name="login" class="com.abc.csm.actions.Login"> 
     <result type="plainText" name="success"></result> 
    </action> 
<action name="home"> 
     <result name="success" type="redirect">/view/Welcome.jsp</result> 
    </action> 

上的index.html我重定向到另一個頁面有2場,emailproject id一種形式,所以我提交此表像

$(function() { 
    $("#loginSubmitBtn").click(submitLogin); 

    function submitLogin() 
    { 
     if(validate()) 
     { 
      $.post("/csm/login.action", 
       { emailaddress: document.getElementById("email_id").value, 
       projectid:  document.getElementById("project_id").value }, 
        function(xml) 
        { 
         if($(xml).find('isSuccess').text()=="true") 
         { 
          sessiontoken=$(xml).find('sessiontoken').text(); 
          $.post("/csm/home.action", { 
           sessiontoken: sessiontoken 
          }); 
         } 
        } 
      ); 
} 
    } 
}); 

}); 

在上面的代碼中,我想獲得sessiontoken從服務器端響應,驗證登錄是否成功,然後重定向到/csm/home.action,但我沒有被重定向,我正在使用fiddler來監視,並且我可以看到Welcome.jsp的內容(/csm/home.action被映射到struts.xml中的Welcome.jsp)作爲響應,但不發生重定向。這裏有什麼解決方案?謝謝

更新這個工程,你也可以檢查我附加的方式sessiontoken它是正確的嗎?

$('#submitDBtn').click(function(event){ 
    event.preventDefault(); 
    if(validate()) 
    { 

     $.post("/csm/login.action", 
      { emailaddress: document.getElementById("email_id").value, 
      projectid:  document.getElementById("project_id").value }, 
       function(xml) 
       { 
        if($(xml).find('isSuccess').text()=="true") 
        { 
         sessiontoken=$(xml).find('sessiontoken').text(); 
         /*$.post("/csm/home.action", { 
          sessiontoken: sessiontoken 
         });*/ 
         $('#launch').attr('action', '/csm/home.action?sessiontoken='+sessiontoken); 
         $('#launch').submit(); 
        } 
       } 
     ); 

    } 

}); 
+0

您無法使用ajax重定向您的頁面,您使用的最後一篇文章將帶您回到同一頁面。 – Vivek

+0

@Vivek:你確定完美嗎?如果你有什麼來源,你能告訴我一些來源嗎? – abi1964

+2

這就是Ajax使用的概念...如果我們不想重定向頁面,但仍想在該場景中填充數據,我們使用'ajax' .. – Vivek

回答

1

嘗試成功時這樣

,而不是

$.post("/csm/home.action", {sessiontoken:sessiontoken}); 

嘗試

window.location = "/csm/home.action"+sessiontoken; 

ABT形式提交

看看這裏

http://jquery-howto.blogspot.com/2009/05/disable-submit-button-on-form-submit.html

您可以用JavaScript禁用表單的默認行爲,然後進行一些處理後使用jQuery

http://api.jquery.com/submit/

和是否它是一個好辦法與否這取決於提交表單,但我聽到並且讀了一個人應該避免它...

編輯 關於發送sessiontoken在隱藏的領域,就在提交表單之前這樣做

var hiddenField = document.createElement("input"); 
    hiddenField.setAttribute("type", "hidden"); 
    hiddenField.setAttribute("name", "sessiontoken"); 
    hiddenField.setAttribute("value", sessiontoken); 
    var form = document.getElementById("yourFormId"); 
    form.appendChild(hiddenField); 
    $('#formid').submit(); 
+0

@ 3nigma:這是我轉換到struts2的原因之一,除了'window.location'之外的其他地方? – abi1964

+0

atm我不能想到任何:) – Rafay

+0

@ 3nigma:好吧,我不想使用窗體的動作,因爲我需要在提交之前執行一些操作,所以有沒有其他方式提交窗體和重定向?也是'window.location'壞方法重定向? – abi1964