首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF PhaseListener viewId总是落后一个

JSF PhaseListener viewId总是落后一个
EN

Stack Overflow用户
提问于 2012-01-27 16:31:41
回答 1查看 2.2K关注 0票数 1

我正在尝试阻止用户使用phaselistener访问特殊页面。出于这个原因,我试图找出他们试图访问的页面。

但我的问题是,我只能在他们之前的地方得到他们的页面。而不是实际的页面。

代码语言:javascript
复制
public void afterPhase(PhaseEvent event) 
{
    FacesContext fc = event.getFacesContext();
    System.out.println("test1" + fc.getViewRoot().getViewId());
}

这里也是一样

代码语言:javascript
复制
public void afterPhase(PhaseEvent event) 
{
    FacesContext fc = event.getFacesContext();
    HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
    String uri = request.getRequestURI();

    System.out.println("uri: " + uri);
}

为什么会这样,以及如何获取用户尝试访问的页面名称?这不是他们之前需要的一个步骤,或者更好的他们来自的页面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-27 18:01:52

它落后了一步,因为这是HTTP POST请求序列的行为方式。当您通过命令按钮在JSF应用程序中导航时,每个请求都作为post请求。

由于您正在保护一些资源,因此要确保通过HTTP GET访问它们,而不是获得确切的视图id,这可以实现为

  • 用户直接从浏览器的地址栏点击url。
  • 在发布jsf应用程序后将其重定向到资源,而不是简单的JSF导航。POST-REDIRECT-GET模式属于这一类。每次发布后你都会显示一些消息,你可能需要Flash地图,这是JSF2中的新特性,如果你使用的是JSF1.x,如果你愿意的话,你可以实现here.
  • If。

最后,捕获HTTP GET请求上的视图ids。

希望这能帮到你。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9030674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档