jsfseam2

How to navigate to different pages on the basis of query params by jsf page initialization in the corresponding controller


@Factory("loginContext")
@Begin(join = true)
public LoginContext initLoginContext() {
    if (loginContext == null) {
      loginContext = new LoginContext();
    }
    loginContext.setLanguageCode(LocaleSelector.instance().getLanguage());
    checkEnvironment();
    Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
    String prodCode=requestParams.get("prodCode");
    String token=requestParams.get("token");
    //token validation
    if (token.equals("admin")) {
        System.out.println("admin page");
    } else if (token.equals("user")) {
        System.out.println("user page");
    } else {
        return loginContext;
    }
}

here i will be getting user credentials in token(JWE string) and then some validation of on user is done(till here code is fine and i am clear how to do this). later on on the basis of user privilege, i will navigate directly to related page for user(instead of loading the login page related to controller)

I am stuck here, Pls suggest something


Solution

  • in the LoginController i added following code which worked for me.:

    @Factory("loginContext")
    @Begin(join = true)
    public LoginContext initLoginContext() {
    if (loginContext == null) {
      loginContext = new LoginContext();
    }
    loginContext.setLanguageCode(LocaleSelector.instance().getLanguage());    
    Map<String,String> requestParams = 
    FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
    String prodCode=requestParams.get("prodCode");
    String token=requestParams.get("token");
    //token validation
    loginContext.setToken(token);
    loginContext.setProductCode(prodCode);
    return loginContext; 
     }
    @Factory(value = "redirectWelcome", autoCreate = true, scope = ScopeType.EVENT)
      public boolean isRedirectWelcome()
    {
    boolean welRet=false;
    if(loginContext.isLoggedIn()==false)
    {
    
    String loginReturn=login();// login is customized method as per my requirement
    if(loginReturn.equals("loggedIn"))
    {
      FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstance(),
          null, "/myservice/auth/showWelcome/welcome.jspx?faces-redirect=true");
    
      loginContext.setLoggedIn(true);
      welRet=true;
    }}
    return welRet;
    
    }
    

    then In JSP page(login.jspx) i added following in the body.

    <h:outputText value="Login  bypass..." rendered="#{loginController.redirectWelcome}" />