编辑 4
我想做的是实现忘记密码页面。例如,我采取了以下示例,这不是真正的用户相关问题,我将用户名保留在会话范围内。
index.xhtml
将是忘记密码页面,我将在其中输入用户名。输入用户名后,我将单击Welcome Me - Action
并在 中chkMe()
,我将检查该用户并在他/她的电子邮件 ID 和 Welcome.xhtml 中发送新密码,我会说Hi User ABC, we have sent new password at asdfasdf@dasf.com
。
主帖
我正在尝试用两种情况将数据从一个 bean 打印到另一个。下面是我的代码。
索引.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body>
<h3>JSF 2.0 Hello World Example - hello.xhtml</h3>
<h:form>
<h:inputText value="#{helloBean.name}"></h:inputText>
<h:commandButton value="Welcome Me - Plain" action="welcome"></h:commandButton>
<h:commandButton value="Welcome Me - Action" action="#{helloBean.chkMe()}"></h:commandButton>
</h:form>
</h:body>
</html>
欢迎.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body bgcolor="white">
<h3>JSF 2.0 Hello World Example - welcome.xhtml</h3>
<h4>Welcome --#{helloBean.name}--</h4>
</h:body>
</html>
HelloBean.java
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class HelloBean implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String chkMe() {
return takeMeToAnotherPage("welcome");
}
public String takeMeToAnotherPage(String linkToGo) {
return linkToGo + "?faces-redirect=true";
}
}
当我在文本Checking
字段中输入文本并单击按钮时,我在 welcome.xhtml 中Welcome Me - Plain
看到文本为文本,但是当我单击时,我看不到任何文本(我看到为)Welcome --Checking--
Welcome Me - Action
Welcome ----
我不知道为什么会这样。
任何想法/建议为什么会发生这种情况。
编辑 1
我相信这都是因为?faces-redirect=true
,但我必须像不使用一样使用它?faces-redirect=true
,地址栏中的 URL 是以前的 url。
例如,如果我在 page1.xhtml 上,然后转到 page2.xhtml,URL 仍然会显示 page1.xhtml。
所以不知道在这种情况下该怎么办。
编辑 2
好吧,我真正想做的是忘记密码页面,我将在 index.xhtml 中输入用户名(考虑上面的示例),如果该用户名是正确的,在 welcome.xhtml 上,我将拥有Hi User ABC, Please use new password for next login. We have sent you email at blah@blah.com
.
RequestScope工作正常,但问题出在 URL 地址上,因此我添加了?faces-redirect=true
. 但是随着它的重定向,http会话正在关闭,因此在welcome.xhtml上,我没有得到任何价值(这就是上面发生的事情)。
另一个解决方案skuntsel
是使用FlashScope,但问题是当我刷新 welcome.xhtml 时,数据消失了,这让我抓狂。
任何人都可以建议需要做什么?
编辑 3
会话范围内的问题如下。
考虑我打开两个选项卡,在两个选项卡上我都有 index.xhtml。在 tab1 我输入Fahim
并单击Welcome Me - Action
。在 tab1 上,welcome.xhtml 出现,我看到文本为Welcome Fahim
. 太棒了。
现在我来到 tab2,输入 name as XYZ
,然后单击Welcome Me - Action
I get welcome.xhtml ,我看到 text as Welcome XYZ
。这也是完美的。
问题是当我回到 tab1 并刷新页面时。当我刷新 tab1 (welcome.xhtml) 时,我看到Welcome XYZ
之前的错误,Welcome Fahim
应该是Welcome Fahim
.