我目前正在学习JSF 2.0,而且每次访问jsf页面时我都不知道如何在我的CDI bean中初始化某些东西?
例如,假设在我的情况下,我有一个在一个JSF页面中使用的CDI bean。在bean内部的某个地方,我想查询和初始化一些东西,或者每次访问页面时检查授权(不是每次调用action方法时)。
我可以将它放入bean的构造函数中,但是这并不能保证每次调用jsf页面都会调用构造函数吗?或者我应该在JSF页面上使用#{myBean.initialize()}调用吗?
此致 Albert Kam
答案 0 :(得分:2)
如果您声明托管bean @RequestScoped
,那么将为每个HTTP请求创建它(是的,这是“每次访问JSF页面时”,正如您在enduser的条款中所说的那样)。您可以在bean的构造函数或@PostConstruct
方法中执行初始化作业。这与CDI无关。
每次访问页面时检查授权(不是每次调用操作方法时)。
为此,javax.servlet.Filter
或非常javax.faces.event.PhaseListener
是一个更好的解决方案。
答案 1 :(得分:1)
答案 2 :(得分:0)
如果我没有弄错,每次页面加载时都会调用构造函数 - 只要将bean应用到jsf页面,就会构造该对象。因此,必须有一个没有任何参数的构造函数