gpt4 book ai didi

java - 在另一个页面中打印 bean 数据 (RequestScope)

转载 作者:行者123 更新时间:2023-12-02 08:37:53 24 4
gpt4 key购买 nike

编辑4

我想做的是实现forgotPassword页面。例如,我采用了下面的示例,这不是真正的用户相关问题,我将用户名保留在 session 范围内。

index.xhtml将是忘记密码页面,我将在其中输入用户名。输入用户名后,我将单击Welcome Me - Action并在 chkMe() ,我会检查该用户并在他/她的电子邮件 ID 和welcome.xhtml 中发送新密码,我会说 Hi User ABC, we have sent new password at asdfasdf@dasf.com .

<小时/>

主要帖子

我正在尝试用两种情况将数据从一个 bean 打印到另一个 bean。下面是我的代码。

index.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 Me - Plain ,我看到文本为 Welcome --Checking-- welcome.xhtml 中的文本,但是当我单击 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 session 正在关闭,因此在welcome.xhtml 上,我没有得到任何值(这就是上面发生的情况)。

来自skuntsel的另一个解决方案是使用FlashScope 但问题又是当我刷新welcome.xhtml时,数据消失了这让我发疯。

有人可以建议需要做什么吗?

<小时/>

编辑3

session 范围内的问题如下。

假设我打开两个选项卡,并且在两个选项卡上都有index.xhtml。在 tab1 上我输入 Fahim并点击Welcome Me - Action 。在 tab1 上,welcome.xhtml 出现,我看到文本为 Welcome Fahim这太完美了。

现在我来到tab2,输入名称为XYZ ,然后单击Welcome Me - Action我收到welcome.xhtml,看到文本为 Welcome XYZ这也是完美的。

问题是当我返回 tab1 并刷新页面时。当我刷新 tab1 (welcome.xhtml) 时,我看到 Welcome XYZ这是错误的,因为之前是 Welcome Fahim它应该是 Welcome Fahim .

最佳答案

根据我的口味,在 session 范围内使用当前用户是一个好主意。

不过,如果它不适合您,我可以提供更多替代方案。

将用户名作为 View 参数传递

翻译过来就是

<h:form>
<h:inputText value="#{helloBean.name}"/>
<h:commandButton value="Welcome Me - Action" action="#{helloBean.chkMe}"/>
</h:form>

public String chkMe() {
return takeMeToAnotherPage("welcome");
}

public String takeMeToAnotherPage(String linkToGo) {
return linkToGo + "?faces-redirect=true&username=" + name;
}

以及 welcome.xhtml 中的附加 View 参数

<f:metadata>
<f:viewParam name="username"/>
</f:metadata>

另一个选项是及时实例化另一个请求范围的 bean 并向其传递信息

<h:form>
<h:inputText value="#{helloBean.name}"/>
<h:commandButton value="Welcome Me - Plain" action="welcome">
<f:setPropertyActionListener value="#{helloBean.name}" target="#{welcomePageBean.username}"/>
</h:commandButton>
</h:form>

@ManagedBean
@RequestScoped
WelcomePageBean {

private String username;//+getter + setter
//other fields associated with the welcome view

}

使用 Flash 对象

详细信息条目 View (片段),base.xhtml:

<h:form>
<h:outputText value="Enter user name for password reset: " />
<h:inputText value="#{flash.username}" />
<br/>
<h:commandButton value="Send me a confirmation email" action="#{forgotBean.changePassword}" />
<h:form>

base.xhtmlForgotBean:

@ManagedBean
@RequestScoped
public class ForgotBean {

public ForgotBean() { }

public String changePassword() {
//check user constraints and return failure outcome in case somthing is wrong
//generate new password and persist it to the database
//send a configmation e-mail
return "successful-reset?faces-redirect=true";
}

}

成功 View (片段),successful-reset.xhtml:

<h:outputText value="Password was reset for user #{receptorBean.username}, e-mail configmation sent." />
<br/>
<h:link value="View homepage" outcome="home" />
successful-reset.xhtml

ReceptorBean:

@ManagedBean
@RequestScoped
public class ReceptorBean {

@ManagedProperty("#{flash}")
private Flash flash;

private String username;

public ReceptorBean() { }

public String getUsername() {
if(username == null) {
String uname = (String)flash.get("username");
flash.keep("inputText");
username= uname;
}
return username;
}

public Flash getFlash() {
return flash;
}

public void setFlash(Flash flash) {
this.flash = flash;
}

}

关于java - 在另一个页面中打印 bean 数据 (RequestScope),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15037870/

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