проблемы навигации с мобильным Primefaces с помощью HttpServletRequest - PullRequest
1 голос
/ 12 октября 2011

Я выполняю перенаправления URL между мобильными страницами простых лиц (pm: page).Например, от login.jsf до /secure/myPage.jsf, оба вечера: страницы.После успешной аутентификации пользователь должен быть перенаправлен на myPage.jsf.Логин запускается так:

       <pm:commandButton value="login" update="messages"                         
                         actionListener="#{loginbean.doLogin}" >
             <f:param name="targetUrlParam" value="defaultTarget" />
       </pm:commandButton>

и перенаправление внутри метода:

public void doLogin(ActionEvent e) throws IOException {

    FacesContext context = FacesContext.getCurrentInstance();
    ExternalContext ec = context.getExternalContext();
    try {
        HttpServletRequest req = (HttpServletRequest) ec.getRequest();

        Authentication authentication = SecurityContextHolder.
                                        getContext().getAuthentication();

    ... // Authentication stuff with Spring Security

        try {
            HttpSession session = req.getSession(false);
            String cp = ec.getRequestContextPath();
            String redirectUrl = cp;

    ... //performing some filtering depending on Roles and target-urls
            }

            String encodedURL = ec.encodeResourceURL(redirectUrl);
            ((HttpServletResponse) ec.getResponse()).sendRedirect(encodedURL);

        } catch (AuthenticationException ae) {
            UtilBean.addErrorMessage("bad_credential");
        }

К сожалению, перенаправление не происходит!Это может быть связано с жизненным циклом Primeface Mobile 3.0M3, потому что все нормально работает с обычными страницами JSF.

Есть предложения?Спасибо

1 Ответ

0 голосов
/ 12 октября 2011

Это не совсем правильный способ отправки перенаправления в JSF.Я не уверен, почему это работает в "нормальном" JSF (который также должен потерпеть неудачу!).В основном вам нужно позвонить FacesContext#responseComplete() после перенаправления, чтобы сообщить JSF, что он не должен переходить к исходу по умолчанию.Однако гораздо лучше выполнить перенаправление, используя ExternalContext#redirect(), поскольку это будет выполняться неявно.

Так что в вашем случае замените

((HttpServletResponse) ec.getResponse()).sendRedirect(encodedURL);

на

ec.redirect(encodedURL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...