Jsf @SessionScoped bean CDI使用Bootsfaces/Primefaces

Jsf @SessionScoped bean CDI使用Bootsfaces/Primefaces,jsf,primefaces,cdi,bootsfaces,session-scope,Jsf,Primefaces,Cdi,Bootsfaces,Session Scope,我目前正在从事一个Maeven项目 问题1:用户可以轻松登录,页面的菜单也会相应更改。但只要单击菜单项,用户就会注销 问题2:登录bean返回空值​​当我把它们注射到另一个豆子里 主菜单是用靴面制作的 测试:使用Primefaces菜单栏,一切正常 Template.xml: `<div id="top"> <ui:insert name="top"> <h:form rendered="#{!login.isIsloggIn()}" &g

我目前正在从事一个Maeven项目

问题1:用户可以轻松登录,页面的菜单也会相应更改。但只要单击菜单项,用户就会注销

问题2:登录bean返回空值​​当我把它们注射到另一个豆子里

主菜单是用靴面制作的

测试:使用Primefaces菜单栏,一切正常

Template.xml:

 `<div id="top">
    <ui:insert name="top">
        <h:form rendered="#{!login.isIsloggIn()}" >
            <b:navBar brand="Enjoy the Holiday" brandHref="#" 
  inverse="true">

            <b:navbarLinks>
                <b:navLink value="Home" icon="home" 
   outcome="/HomePage"/>
              <b:navLink value="About" href="#about"/>
              <b:navLink value="Contact" href="#contact"/>
            </b:navbarLinks>
           <b:navbarLinks pull="right">
            <b:navLink value="Sign Up" outcome="/Registrationpage"/>
            <b:navLink value="Login" outcome="/LoginPage"/>

            </b:navbarLinks>
          </b:navBar>
        </h:form>

        <h:form rendered="#{login.isIsloggIn()}">
             <b:navBar brand="Enjoy the Holiday" brandHref="#" inverse="true">
            <b:navbarLinks>
                <b:navLink value="Home" icon="home" outcome="/HomePage"></b:navLink>
              <b:navLink value="About" href="#about"></b:navLink>
              <b:navLink value="Contact" href="#contact"></b:navLink>
            </b:navbarLinks >
            <b:navbarLinks pull="right">

                <b:dropMenu value="Wilkommen 
   {login.GetUserNamebyEmail()}"  >
                    <b:navLink value="Profil" icon="user" 
    outcome="/Overviews/KundeOverview"></b:navLink>

                    <b:navLink value="Inbox" icon="envelope" href="#"> 
        </b:navLink>
                    <b:navLink></b:navLink>
                    <b:navLink header="Konto"></b:navLink>
                    <b:navLink value="Einstellung" icon="cog" href="#"> 
   </b:navLink>
                </b:dropMenu>
                <b:navLink value="Logout" icon="log-out"  outcome="# 
    {login.loggOut()}"></b:navLink>
                 </b:navbarLinks>
              </b:navBar>
        </h:form>
    </ui:insert>
另一个Bean:

@Named
@RequestScoped
public class KundenModel implements Serializable {

@Inject
private Login login ;

 @Inject
private AccountService accountService;

@Inject
private KundeService kundeService;

@PersistenceContext(unitName="EtHPU")
private E .....
输出中没有错误,但我收到以下警告:

13:05:22,555 WARN  [org.jboss.weld.Bootstrap] (MSC service thread 1-5) WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class com.sun.faces.flow.FlowDiscoveryCDIHelper is deprecated from CDI 1.1!

13:17:08,869 WARN  [org.jboss.as.weld] (default task-7) WFLYWELD0052: Using deployment classloader to load proxy classes for module org.jboss.jts. Package-private access will not work. To fix this the module should declare dependencies on [org.jboss.weld.core, org.jboss.weld.spi]
13:05:22555警告[org.jboss.weld.Bootstrap](MSC服务线程1-5)weld-000146:BeforeBeanDiscovery.addAnnotatedType(AnnotatedType)用于类com.sun.faces.flow.FlowDiscoveryCDIHelper从CDI 1.1中被弃用!
13:17:08869警告[org.jboss.as.weld](默认任务-7)WFLYWELD0052:使用部署类加载器加载模块org.jboss.jts的代理类。包私有访问将不起作用。要解决这个问题,模块应该声明对[org.jboss.weld.core,org.jboss.weld.spi]的依赖关系

也许您应该尝试实现一个LoginService(RequestScope),它有一个注入的UserSession或UserContext(SessionScoped),它只保存有关登录用户的信息,而没有任何注入的bean。我之所以考虑这个问题,是因为我不知道在请求范围的注入被破坏之后,SessionScoped Bean会发生什么

像这样尝试:

@Named
@SessionScoped
 public class UserContext implements Serializable{
 private boolean loggedIn;
 private String email;

....
}


也许您应该尝试实现一个LoginService(RequestScoped),它有一个注入的UserSession或UserContext(SessionScoped),它只保存有关登录用户的信息,而没有任何注入bean。我之所以考虑这个问题,是因为我不知道在请求范围的注入被破坏之后,SessionScoped Bean会发生什么

像这样尝试:

@Named
@SessionScoped
 public class UserContext implements Serializable{
 private boolean loggedIn;
 private String email;

....
}


javax.faces.bean.SessionScoped
还是
javax.enterprise.context.SessionScoped
?我使用javax.enterprise.context。SessionScoped@YounesOualad你说登录返回空值?您的意思是登录bean为空吗?或者您的意思是bean中的值为空?显示问题的一些堆栈跟踪可能会有帮助。是
javax.faces.bean.SessionScoped
还是
javax.enterprise.context.SessionScoped
?我使用javax.enterprise.context。SessionScoped@YounesOualad你说登录返回空值?您的意思是登录bean为空吗?或者您的意思是bean中的值为空?一些显示问题的堆栈跟踪可能会有所帮助。
@Named
@SessionScoped
 public class UserContext implements Serializable{
 private boolean loggedIn;
 private String email;

....
}
@Named
@RequestScoped
 public class LoginService implements Serializable{

 @Inject
 private UserContext userContext;

   public String loggIn(){


    this.account = this.accountService.checkPassword(email, password);
    if(this.account == null){

       return  "Loginfailed";
    }else{

        userContext.setLoggedIn(true);
         userContext.setUserEmail(email);
         return  "Loginsuccess";
    }

  }

}