2012-01-27 2 views
1

Im пытается предотвратить доступ пользователей к специальным страницам с фаселистером. по этой причине им пытаются выяснить, на какой странице они пытаются получить доступ.JSF PhaseListener viewId всегда один за

но моя проблема в том, что я получаю только ту страницу, где раньше. а не фактическая страница.

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); 
} 

почему это, и как я получаю ИмяСтраницы пользователь пытается получить доступ? Не то, чтобы они требовали одного шага раньше, или лучше страницы, из которой они идут.

ответ

4

Это один шаг назад, потому что именно так поступает последовательность запросов HTTP POST. Когда вы выполняете навигацию в приложении JSF с помощью командных кнопок, каждый запрос отправляется в виде почтового запроса.

Поскольку вы защищаете некоторые ресурсы убедитесь, что они доступны через HTTP GET, чем вы получите точный вид идентификатора, это может быть достигнуто, как

  • Пользователь непосредственно попадает в URL из адресной строки браузера.
  • После сообщения приложения jsf перенаправить его на ресурс вместо простой навигации JSF. POST-REDIRECT-GET шаблон попадает в это посмотреть here.
  • Если вы показываете некоторые сообщения после каждого POST, вам может понадобиться карта Flash, что является новой функцией в JSF2, если вы находитесь на удаче JSF1.x, вы можете реализовать флеш, если хотите.

Завершить улавливание идентификаторов вида по запросу HTTP GET.

Надеюсь, это поможет ...

+0

Другими словами, не выполняйте навигацию по страницам POST, а через GET. См. Также http://stackoverflow.com/questions/4317684/when-should-i-use-houtputlink-instead-of-hcommandlink – BalusC