- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的 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/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!