首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ExternalContext重定向指向IllegalStateException

ExternalContext重定向指向IllegalStateException
EN

Stack Overflow用户
提问于 2021-05-18 15:51:08
回答 1查看 19关注 0票数 0

我正面临着一个来自我们的用户的问题。不知何故,用户只需一次点击就可以进行多次重定向。通过这样做,重定向方法被多次调用,这导致了IllegalStateException。我尝试首先检查响应是否已提交,如果响应未提交,则仅调用重定向方法。而且它是有效的。只有一个重定向请求被发送到浏览器,而不是全部。但是我想知道是否可以发送多条重定向语句。是否可以在提交旧响应后使用新响应创建新请求?

以下是对提交的重定向的工作检查:

代码语言:javascript
运行
复制
    public static final boolean redirect(String targetPath) {
    try {
        if(!isCommitted()) {
            exContext().redirect(checkAppendContextPath(targetPath));
            return true;
        }else{
            return false;
        }
    } catch (IOException e) {
        if (LOG.isErrorEnabled()) {
            LOG.error(String.format(ERROR_REDIRECT, context().getViewRoot().getViewId(), targetPath));
        }
        return false;
    }
}


private static final boolean isCommitted(){
    if(exContext().getResponse() instanceof HttpServletResponse){
        if(((HttpServletResponse) exContext().getResponse()).isCommitted()){
            return true;
        }else{
            return false;
        }
    }else{
        return false;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-05-18 18:09:09

不能,不能在服务器端发出请求。它们必须源自客户端。

我发现很难相信一次点击就会触发多个请求,除非涉及到JavaScript。如果涉及到JavaScript,请检查它是否有bug。否则,您可以尝试防止在客户端进行多次单击。如果您使用的是PrimeFaces,并且重定向是从p:commandButton触发的,那么您可以尝试使用PrimeFaces Extensions CommandButtonSingleClickRenderer

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

https://stackoverflow.com/questions/67582044

复制
相关文章

相似问题

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