如何在相应的控制器中通过jsf页面初始化根据查询参数导航到不同的页面 @Factory(“登录文本”) @开始(join=true) 公共LoginContext initLoginContext(){ 如果(loginContext==null){ loginContext=新的loginContext(); } loginContext.setLanguageCode(LocaleSelector.instance().getLanguage()); 检查环境(); Map requestParams=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 字符串prodCode=requestParams.get(“prodCode”); String token=requestParams.get(“token”); //令牌验证 if(令牌等于(“管理员”)){ System.out.println(“管理页面”); }else if(token.equals(“用户”)){ System.out.println(“用户页”); }否则{ 返回登录文本; } }

如何在相应的控制器中通过jsf页面初始化根据查询参数导航到不同的页面 @Factory(“登录文本”) @开始(join=true) 公共LoginContext initLoginContext(){ 如果(loginContext==null){ loginContext=新的loginContext(); } loginContext.setLanguageCode(LocaleSelector.instance().getLanguage()); 检查环境(); Map requestParams=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 字符串prodCode=requestParams.get(“prodCode”); String token=requestParams.get(“token”); //令牌验证 if(令牌等于(“管理员”)){ System.out.println(“管理页面”); }else if(token.equals(“用户”)){ System.out.println(“用户页”); }否则{ 返回登录文本; } },jsf,seam2,Jsf,Seam2,在这里,我将在令牌(JWE字符串)中获取用户凭据,然后对用户进行一些验证(直到这里的代码很好,我清楚如何执行)。稍后,基于用户权限,我将为用户直接导航到相关页面(而不是加载与控制器相关的登录页面) 我被困在这里,请在LoginController中提出一些建议,我添加了以下适用于我的代码: @Factory("loginContext") @Begin(join = true) public LoginContext initLoginContext() { if (loginConte

在这里,我将在令牌(JWE字符串)中获取用户凭据,然后对用户进行一些验证(直到这里的代码很好,我清楚如何执行)。稍后,基于用户权限,我将为用户直接导航到相关页面(而不是加载与控制器相关的登录页面)


我被困在这里,请在LoginController中提出一些建议,我添加了以下适用于我的代码:

@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;
    }
}
@Factory(“登录文本”)
@开始(join=true)
公共LoginContext initLoginContext(){
如果(loginContext==null){
loginContext=新的loginContext();
}
loginContext.setLanguageCode(LocaleSelector.instance().getLanguage());
映射请求参数=
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
字符串prodCode=requestParams.get(“prodCode”);
String token=requestParams.get(“token”);
//令牌验证
loginContext.setToken(令牌);
loginContext.setProductCode(prodCode);
返回登录文本;
}
@工厂(value=“redirectWelcome”,autoCreate=true,scope=ScopeType.EVENT)
公共布尔值isRedirectWelcome()
{
布尔Wellet=false;
if(loginContext.isLoggedIn()==false)
{
String loginReturn=login();//login是根据我的要求定制的方法
if(loginReturn.equals(“loggedIn”))
{
FacesContext.getCurrentInstance().getApplication().getNavigationHandler().HandlenNavigation(FacesContext.getCurrentInstance(),
null,“/myservice/auth/showWelcome/welcome.jspx?faces redirect=true”);
loginContext.setLoggedIn(true);
Wellet=true;
}}
返回韦勒特;
}
然后在JSP页面(login.jspx)中,我在主体中添加了以下内容

@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;

}


两件事:1:缩小你的问题范围,相应地调整问题和标题。如果您可以读取查询参数,但不能重定向,则它与查询参数无关(使用静态列表中的随机选取会导致相同的问题)。如果您无法读取查询参数,则它与“导航”无关。2:您能在代码中使用更好的缩进吗?3:、工厂、开始等不是我们都有的东西,所以排除它们是问题的一部分。我已经更新了问题,希望对你来说没问题。不,实际上不是更好。java标记已关闭(请参见我的编辑中的注释),对于其余部分,除了添加了“seam2”标记外,没有任何改进(任何与seam相关的部分都是(
@Begin
是?)。我的评论的大多数部分都没有提到,因此,如果java标记被删除,几乎不可能帮助您。loginContext用于关联用户和一些其他详细信息,以完成令牌验证。就提问而言,我是stackoverflow新手。抱歉,不,我是故意删除java标记的…只有java knowle的人dge无法回答这个问题。它是一个纯jsf(甚至可能与seam无关)。您无法下载没有任何内容的jdk并重新创建问题……我在第一条评论中给了您一些提示。请尝试一下。干杯!
<h:outputText value="Login  bypass..." rendered="#{loginController.redirectWelcome}" />