我有一个程序,其中以下代码(不是我自己编写的)按预期工作:
.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
返回“success”后,执行操作dataform
,此操作会将用户重定向到以下网址(使用参数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){ ......
网址正是该操作的链接,因此可行。通过使用调试消息,我可以确认操作dataDeleteSample
触发器,并调用方法deleteSample
。但由于某种原因,用户不会像上面那样被重定向到网址。我甚至删除了方法deleteSample
中的所有业务逻辑,只是让它返回Action.SUCCES,但结果似乎仍未触发数据表单操作并重定向用户。
是什么导致这个?这是我使用AJAX的事实吗?我不熟悉struts知道为什么第一个代码有效,但我的不行。关于struts框架如何处理这种情况的任何见解都是值得欢迎的。
答案 0 :(得分:0)
您将不会注意到重定向,因为您使用AJAX调用它,这意味着您获得的DATA必须附加到DOM中才能查看结果。在成功事件处理程序中,您必须这样做。它可能会失败,调试它。
答案 1 :(得分:0)
您必须替换为type =“ chain”
<action name="remove" class="com.action.firstAction" method="remove">
<result name="success" type="chain">secondaction</result>
</action>
<action name="second action" class="com.action.secondAction" method="result">
<result name="success">result.jsp</result>
</action>