我正在使用spring + primefaces
创建一个应用程序我在托管bean中创建了一个init函数来加载一些有用的数据(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()
方法没有再次调用因此“currentUser”仍然是老一辈(正常的人)
更新
问题可能是我混合了Spring DI和JSF托管bean,还有更多细节
@Entity
注释@Repository("DataDao")
注入daos(来自
弹簧)@Service("DataManager")
@Authowire
@Qualifier
等@Component("DataManagedBean")
和@ViewScope
我已经使用该应用程序2周了,一切都按预期工作。直到今天我发现@PostConstruct实际上再也没有调用过,视图永远不会被破坏:S(或者它打算像这样工作,单身......)
有人可以向我解释我做错的地方吗?
答案 0 :(得分:0)
经过对JSF范围的深入阅读,特别感谢@M。 Deinum的评论和@ BalusC先生的excelent article解释了JSF沟通主题。我理解为什么用户对象在logout / relogin之后幸存下来。
我的错误是将Spring DI(使用@Component
注释)和JSF注释(使用@ViewScoped
)结合起来,然后忽略@ViewScoped
注释并使用默认的弹簧范围,默认情况下是单身......