首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Struts 1-通过一个帖子调用更多操作而不更改struts-config

Struts 1-通过一个帖子调用更多操作而不更改struts-config
EN

Stack Overflow用户
提问于 2018-05-11 14:52:56
回答 1查看 207关注 0票数 1

我正在开发一个遗留应用程序(struts 1,自己的框架,java 6,在WebSphere 7上),在这里我需要改变操作的行为。

让我们称它们为(1) CopyItem,(2) AlterItem,(3) MarkAsCopied。

一个名为“一个服务”的按钮,需要替换为其他三个服务。

根据第一个结果,调用第二个结果,依此类推。最后,我想导航到第一个会带我去的地方(所以从用户的角度来看,它看起来就像最初的行为)。

最初,我认为我将所需的每个参数打包到一个表单中,发布它,然后在Java端为每个服务调用action execute。从技术上讲,从CopyItemAction.execute()到CopyItem,我会调用AlterItem,MarkAsCopied也会执行。

我觉得这远远不是一个干净的解决办法。

你有更好的主意,怎么做?

EN

回答 1

Stack Overflow用户

发布于 2018-05-24 08:49:35

最后,我通过同步Ajax完成了它。这绝对是不好的做法,所以我不建议您是否可以访问后端代码。然而,就我现在的情况而言,这是一个可行的、不那么丑陋的解决方案。基于戴夫牛顿(https://stackoverflow.com/users/438992/dave-newton)的建议。

记住,struts操作仍然是根据struts-config.xml.中定义的配置调用的。

我在下面创建了js函数,并用指定的表单逐个调用服务。通过这种方式,表单(POST)提交调用struts操作,但不会离开。在它们成功运行之后,我重定向了页面。

代码语言:javascript
复制
    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;
        }
    }

总结:这不是一个推荐的解决方案,但是如果你像我一样处于这种情况下,那么它就有效了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50295003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档