2013-10-18 27 views
1

我有一個程序,下面的代碼(不是我自己寫的)工作原理intented:Struts2的結果類型= 「redirectAction」 不重定向

.JSP碼:

<input type="submit" value="add sample" name="action:dataAddSample" id="buttonAddSample"/> 

的struts.xml代碼:

<action name="dataAddSample" class="com.invenso.xperido.controller.DataCRUD" method="addSample"> 
    <result name="success" type="redirectAction"> 
     <param name="actionName">dataform</param> 
     <param name="id">${data.id}</param> 
    </result> 
</action> 

的actionmethod後addSample返回「成功」,動作dataform進行掃描,並且這個動作將用戶重定向到以下網址(使用parame之三ID):

http://localhost:8080/Test/data/dataform.action?id=11476 

我複製在同一個包&命名空間的代碼來實現類似的工作流程,只有不同的操作方法(刪除而不是相加):

<action name="dataDeleteSample" class="com.invenso.xperido.controller.DataCRUD" method="deleteSample"> 
    <result name="success" type="redirectAction"> 
     <param name="actionName">dataform</param> 
     <param name="id">${data.id}</param> 
    </result> 
</action> 

我改變了

JAVASCRIPT/AJAX代碼:

$.ajax({ 
type: "POST", 
url: "<s:property value='urlDeleteSample'/>", 
data: { sampleDBName: sampleName, sampleDBQueryName: queryName }, 
success: function(data, textStatus, jqXHR){ ...... 
0的動作是通過利用AJAX,而不是直接連接的輸入按鈕的動作調用的

URL正好是動作的鏈接,因此可以工作。通過使用調試消息,我可以確認觸發器的操作dataDeleteSample,並調用方法deleteSample。但由於某種原因,用戶不會像上面那樣被重定向到url。我甚至刪除了方法deleteSample中的所有業務邏輯,只是讓它返回Action.SUCCES,但結果似乎沒有觸發dataform操作並重定向用戶。

這是什麼原因造成的?這是我使用AJAX的事實嗎?我對struts知之甚少,不知道爲什麼第一個代碼可以工作,但我不知道。歡迎任何有關struts框架如何處理這種情況的見解。

+0

你的ajax調用沒有'data.id'。 –

+0

確實如此!我將AJAX數據更改爲: data:{sampleDBName:sampleName,sampleDBQueryName:queryName,dataID = id} 但是現在我不知道在struts.xml中輸入什麼來訪問這些數據? $ param name =「id」> $ {dataID}不起作用,但 15745(這是文字字符串...)確實有效。 – user1884155

+0

爲什麼不使用同名的'data.id'? –

回答

0

你不會注意到重定向,因爲你用AJAX調用它,這意味着你得到的數據必須被附加到DOM中才能看到結果。在成功事件處理程序中,您必須這樣做。它可能在那裏失敗,調試它。