2014-10-01 69 views
0

我正在与弹簧+ primefaces应用何时会再次调用JSF @PostConstruct?

我在托管bean创建初始化函数加载一些有用的数据(bean是@ViewScope

@PostConstruct 
    public void init(){ 
     log.debug("initing...."); 
     currentUser = UserUtil.getCurrentUser(this.userManager); 
     loadData(); 
    } 

鉴于以后我有一些标签隐藏的列是这样的:

<p:column rendered="#{dataManagedBean.currentUser.manager}"> // to test if the current user is a manager role 
... 
... 
</p:column> 

的问题是,当我用普通用户登录,那么即使退出,并与经理的用户,我想说明没有显示列登录,因为init()方法不再因此调用“当前用户”仍然是oldone(正常发售者)

UPDATE

问题,也许我是混合春DI和JSF管理的bean,有更详细

    在的JavaBean层
  • :我用@Entity注释为在DAO层冬眠
  • :我用@Repository("DataDao")注入DAOS(由 弹簧)
  • 在经理层:我用用很多Spring注解像 @Service("DataManager")@Authowire@Qualifier
  • 在视图层
  • 注入,因为我一直在使用的弹簧注入,这就是为什么我 使用@Component("DataManagedBean")@ViewScope

我已经有了两周的应用程序,并且一切都按预期工作。直到我今天发现@PostConstruct实际上再也没有打过电话,视图永远不会被破坏:S(或者它的工作就像这样,一个单身...)

有人可以好心解释我在哪里做错了吗?

+0

我不确定,但我认为只要你保持相同的观点,你只需要初始化它一次。你是否呆在同一页面? – Leo 2014-10-02 01:18:46

+0

不,用户点击“注销”后重定向到注销页面,然后登录页面。我已更改为sessionScope并仍然发生相同 – Kossel 2014-10-02 01:43:49

+0

可能您有一些在您的模板中使用#{dataManagedBean.xxx}的属性。你用那样吗? – wittakarn 2014-10-02 01:54:24

回答

0

在深入阅读了关于JSF范围之后,特别感谢@M。 Deinum的评论和Mr BalusC的excelent article解释了关于JSF通信主题。我明白为什么用户对象在注销/重新登录后幸免于事件。

我的错误是结合春季DI(通过使用@Component注释)和JSF注释(通过使用@ViewScoped),那么@ViewScoped注释被忽略,默认弹簧范围使用,这是在默认情况下一个单...

相关问题