我有一個程序,下面的代碼(不是我自己寫的)工作原理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框架如何處理這種情況的見解。
你的ajax調用沒有'data.id'。 –
確實如此!我將AJAX數據更改爲: data:{sampleDBName:sampleName,sampleDBQueryName:queryName,dataID = id} 但是現在我不知道在struts.xml中輸入什麼來訪問這些數據? $ param name =「id」> $ {dataID}不起作用,但 15745(這是文字字符串...)確實有效。 – user1884155
爲什麼不使用同名的'data.id'? –