我试图阻止用户使用phaselistener访问特殊页面。因此,我试图弄清楚他们试图访问哪个页面。
但我的问题是,我只得到他们之前的页面。不是实际的页面。
public void afterPhase(PhaseEvent event)
{
FacesContext fc = event.getFacesContext();
System.out.println("test1" + fc.getViewRoot().getViewId());
}
同样在这里
public void afterPhase(PhaseEvent event)
{
FacesContext fc = event.getFacesContext();
HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
String uri = request.getRequestURI();
System.out.println("uri: " + uri);
}
为什么会这样,我如何获得用户尝试访问的页面名称?不是那个他们需要一步之前,或者更好的是他们来自的页面。
答案 0 :(得分:4)
落后一步,因为这是HTTP POST请求的行为方式。当您通过命令按钮在JSF应用程序中导航时,每个请求都作为发布请求发送。
由于您要保护某些资源,请确保通过HTTP GET访问它们,而不是获得确切的视图ID,这可以通过
实现结束捕获HTTP GET请求的视图ID。
希望这会有所帮助......