gpt4 book ai didi

java - ajax 重定向不起作用

转载 作者:行者123 更新时间:2023-12-02 08:30:52 25 4
gpt4 key购买 nike

这是我的 jsf 代码:-

  <h:commandButton id="cmdLogin" value="Login" actionListener="#{indexBean.login}">
<f:ajax execute="@form" render="@all" />
</h:commandButton>

这是我的indexBean的登录方法:-

 public void login(){

HttpServletResponse objHttpServletResponse = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
objHttpServletResponse.sendRedirect("Restricted/Home.jsf");

}

我在 javascript emptyResponse 中收到一个警报:从服务器收到空响应。检查服务器错误日志。。为什么这种类型的重定向不起作用?

编辑:-有趣的是,当我从 faces-config.xml 重定向时,它起作用了!

<faces-config version="2.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">

<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>Home</from-outcome>
<to-view-id>/Restricted/Home.jsf</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>

</faces-config>

显然,我将命令按钮的 actionListener 更改为 action 并将 login 的返回类型更改为 String 并且从登录方法返回home。现在有人可以知道这是否是 JSF 中所需的行为吗?为什么来自 faces-config.xml 的重定向有效,而托管bean 中的简单重定向却不起作用?

最佳答案

HttpServletResponse objHttpServletResponse = (HttpServletResponse)
FacesContext.getCurrentInstance()
.getExternalContext()
.getResponse();
objHttpServletResponse.sendRedirect("Restricted/Home.jsf");

在这里,您离开 JSF API 并转向 servlet API,其中 JSF 不会处理您所做的任何事情。当您调用此方法时,服务器返回 302 response而不是 JavaScript API 期望的 AJAX 响应。

在 JSF 中执行编程重定向的正确机制是使用 ExternalContext :

FacesContext.getCurrentInstance()
.getExternalContext()
.redirect("yourUrl");

如果您在 JSF 2.0 中通过 AJAX 调用使用此机制,服务器将发送如下响应:

<?xml version="1.0" encoding="utf-8"?>
<partial-response><redirect url="yourUrl"></redirect></partial-response>

您可以使用类似 Firebug 的工具和 Fiddler检查服务器的响应。

<小时/>

请注意,此方法签名不正确:public void login()。规范规定操作方法必须声明一个对象返回类型(您的实现没有抛出错误这一事实仅意味着您很幸运)。

关于java - ajax 重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com