我有一个程序,其中以下代码(不是我自己编写的)按预期工作:
.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>
在 actionmethodaddSample
返回“成功”后,dataform
执行该操作,该操作将用户重定向到以下 url(使用参数 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>
我通过使用 ajax 而不是直接将输入按钮链接到操作来更改调用操作的方式:
JAVASCRIPT/AJAX 代码:
$.ajax({
type: "POST",
url: "<s:property value='urlDeleteSample'/>",
data: { sampleDBName: sampleName, sampleDBQueryName: queryName },
success: function(data, textStatus, jqXHR){ ......
URL 正是该操作的链接,因此可以正常工作。通过使用调试消息,我可以确认动作dataDeleteSample
触发器,并deleteSample
调用该方法。但由于某种原因,用户没有被重定向到上面的 url。我什至删除了方法中的所有业务逻辑,deleteSample
只是让它返回 Action.SUCCES,但结果似乎仍然没有触发数据表单操作并重定向用户。
什么可能导致这种情况?这是我使用 AJAX 的事实吗?我对 struts 不够熟悉,不知道为什么第一个代码可以工作,但我的不行。欢迎任何关于 struts 框架如何处理这种情况的见解。