gpt4 book ai didi

java - 在 JSF HttpServletRequest 对象 getAttribute() 返回 Null 中

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:21 25 4
gpt4 key购买 nike

我有两个不同的 JSF 页面让我们假设 A.jsfB.jsf 但两者都调用相同的托管 bean 不同的方法ManagedBean.java

A.jsf 正在调用 SessionScoped Managed bean 方法,我在 Request 类对象中设置了一些属性

HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
request.setAttribute("token", requestToken.getToken());
request.setAttribute("tokenSecret", requestToken.getTokenSecret());

然后像这样重定向另一边

response.sendRedirect(requestToken.getAuthorizationURL());

现在,成功登录后,我将打开网站的另一个 JSF 页面(假设 b.jsf),并从该页面调用这样的方法

<f:event listener="#{ManagedBean.redirectLogin2}" type="preRenderView" />

并调用相同的 Managedbean 但另一个方法

public String redirectLogin2() throws TwitterException {

HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
}

但是当我在上面的方法中执行时 redirectLogin2()

request.getAttribute("token")
request.getAttribute("tokenSecret")

两者都给出 Null。这里的问题是什么?

最佳答案

请求范围属性的生命周期将在 sendRedirect 上丢失。您应该在 session 范围上设置值。

 HttpSession session=request.getSession();
session.setAttribute("token", requestToken.getToken());
session.setAttribute("tokenSecret", requestToken.getTokenSecret());

为 session 设置值后。您可以通过请求访问它,例如

 HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();

request.getSession().getAttribute("token");
request.getSession().getAttribute("tokenSecret");

虽然上面的代码可以工作,但这不是一个好的做法。 JSF 有 @SessionScoped 注释,它将允许您通过登录 session 访问变量。

关于java - 在 JSF HttpServletRequest 对象 getAttribute() 返回 Null 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930978/

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