在JSF HttpServletRequest对象getAttribute()返回Null



我有两个不同的JSF页面,我们假设A。B. jsfjsf但是都调用相同的托管bean不同的方法ManagedBean.java

。jsf正在调用一个SessionScoped Managed bean方法,其中我在请求类对象

中设置了一些属性
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上丢失。你应该在会话范围上设置值。

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

将value设置为session后。你可以通过请求访问,比如

 HttpServletRequest request = (HttpServletRequest) FacesContext
            .getCurrentInstance().getExternalContext().getRequest();
request.getSession().getAttribute("token");
request.getSession().getAttribute("tokenSecret");

虽然,上面的代码将工作,但这不是良好的做法。JSF有@SessionScoped注释,这将使您可以通过登录会话访问变量。

相关内容

  • 没有找到相关文章

最新更新