Jsf @SessionScoped bean CDI使用Bootsfaces/Primefaces
我目前正在从事一个Maeven项目 问题1:用户可以轻松登录,页面的菜单也会相应更改。但只要单击菜单项,用户就会注销 问题2:登录bean返回空值当我把它们注射到另一个豆子里 主菜单是用靴面制作的 测试:使用Primefaces菜单栏,一切正常 Template.xml: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
`<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";
}
}
}