当发送的请求是 Ajax 请求时,如何从 ManagedBean 重定向?

Posted

技术标签:

【中文标题】当发送的请求是 Ajax 请求时,如何从 ManagedBean 重定向?【英文标题】:How to redirect from a ManagedBean for when the request sent is an Ajax request? 【发布时间】:2011-08-26 20:36:04 【问题描述】:

我正在使用带有 JSF2 的 PrimeFaces。我正在尝试通过将登录名和密码作为 Ajax 请求发送来对用户进行身份验证。在支持 bean 的操作方法中,我正在尝试验证用户并在验证成功时重定向到新视图。

在使用 primefaces 时这可能吗?

因为我认为使用 primefaces'p:commandButton,我只能有 ajax 行为或导航。

【问题讨论】:

【参考方案1】:

是的,只需发送重定向而不是(默认)转发作为结果。 <navigation-case>-less JSF 2.0 方式会将?faces-redirect=true 附加到操作方法中的结果字符串。

例如

public String login() 
    // ...
    return "home?faces-redirect=true";

【讨论】:

嘿!我试过了,效果很好,解决了我的问题。谢谢。【参考方案2】:

这是您可能会发现有用的另一种技术。这是当您通过 AJAX 从不实现导航的 Primefaces 属性调用方法时。例如,我有一个 p:tree 对象,其方法由 nodeSelectionListener 选择。

在该方法中,您可以像这样调用重定向:

String url = (something)
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
try 
        ec.redirect(url);
 catch (IOException ex) 
        Logger.getLogger(Navigation.class.getName()).log(Level.SEVERE, null, ex);

希望你觉得这很有用。

【讨论】:

这实际上是相同的,但使用的是老式的 JSF 1.x 方式。 适用于 JSF2.0 primeFace autoComplite。谢谢! 非常有用的代码,我在Spring Security(form-login)成功登录后用于重定向

以上是关于当发送的请求是 Ajax 请求时,如何从 ManagedBean 重定向?的主要内容,如果未能解决你的问题,请参考以下文章

如何区分 Ajax 请求和普通 Http 请求?

Ajax中与服务器的通信发送请求与处理响应

通过 CURL 发送 ajax 请求

ajax如何可以发送同步请求

Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?

Flask04 后台获取请求数据视图函数返回类型前台接受响应数据