我正在开发一个遗留应用程序(struts 1,自己的框架,java 6,在WebSphere 7上),在这里我需要改变操作的行为。
让我们称它们为(1) CopyItem,(2) AlterItem,(3) MarkAsCopied。
一个名为“一个服务”的按钮,需要替换为其他三个服务。
根据第一个结果,调用第二个结果,依此类推。最后,我想导航到第一个会带我去的地方(所以从用户的角度来看,它看起来就像最初的行为)。
最初,我认为我将所需的每个参数打包到一个表单中,发布它,然后在Java端为每个服务调用action execute。从技术上讲,从CopyItemAction.execute()到CopyItem,我会调用AlterItem,MarkAsCopied也会执行。
我觉得这远远不是一个干净的解决办法。
你有更好的主意,怎么做?
发布于 2018-05-24 08:49:35
最后,我通过同步Ajax完成了它。这绝对是不好的做法,所以我不建议您是否可以访问后端代码。然而,就我现在的情况而言,这是一个可行的、不那么丑陋的解决方案。基于戴夫牛顿(https://stackoverflow.com/users/438992/dave-newton)的建议。
记住,struts操作仍然是根据struts-config.xml.中定义的配置调用的。
我在下面创建了js函数,并用指定的表单逐个调用服务。通过这种方式,表单(POST)提交调用struts操作,但不会离开。在它们成功运行之后,我重定向了页面。
function submitForm(form) {
if (form !== null && form !== undefined) {
let formData = new FormData(form);
let xhr = new XMLHttpRequest();
xhr.open('POST', form.getAttribute('action'), false);
var successResponse = false;
xhr.onreadystatechange = function() {
if(xhr.readyState == XMLHttpRequest.DONE) {
successResponse = xhr.status == 200;
}
}
xhr.send(formData);
return successResponse;
}
}总结:这不是一个推荐的解决方案,但是如果你像我一样处于这种情况下,那么它就有效了。
https://stackoverflow.com/questions/50295003
复制相似问题