我为每个用户都有一个导航管理bean。
我需要先在任何其他bean之前初始化,因为bean需要一个值。
我可以知道我该怎么做吗?
我尝试了eager="true"
,但它不起作用。
通过faceconfig的任何快速简便的解决方案将不胜感激。
答案 0 :(得分:2)
只需在bean @PostConstruct
中执行所需的初始化作业。
@PostConstruct
public void init() {
// Here.
}
第一次从另一个bean注入/引用bean时会调用它。
eager=true
仅适用于应用程序范围的bean。
答案 1 :(得分:0)
从我看到你应该引用另一个bean。让我们假设一个实用程序类可以从上下文中提取bean。
基本上 - >
//Bean A
public void doSomething()
{
String required = Utility.getBeanB().getRequiredValue();
use(required);
}
...
//Bean B
public String getRequiredValue()
{
return "Hi, I'm a required value";
}
我有几个大型网络应用程序,它们有一个“会话Bean”,可以存储用户首选项,共享对象等内容......这种方法非常有效。通过使用对bean的引用,您无需链接初始化。该方法将始终依赖于其他bean中的方法,从而保证初始化的顺序。
有多种方法可以访问bean,但我通常会通过EL路径 - >
Get JSF managed bean by name in any Servlet related class
祝你好运,我尽力保持“功能纯洁” - 我希望考虑到这种语言会让人大笑!
答案 2 :(得分:0)
对于你来说,这是一个很酷的hax,以防其他解决方案因各种情况而无法为你工作......
假设我有一个我想要首先初始化的课程Atom : 1.26.1
Electron: 1.7.11
Chrome : 58.0.3029.110
Node : 7.9.0
:
Alpha
我可以在public class Alpha {
@PostConstruct
public void init() {
}
}
中添加以下方法:
Alpha
然后,在任何过早初始化的类中,只需调用:
@ManagedBean(name = "Alpha", eager = true)
public class Alpha {
public static void requireAlpha() {
FacesContext context = FacesContext.getCurrentInstance();
Object alpha = context.getApplication().evaluateExpressionGet(context, "#{Alpha}", Object.class);
System.out.println("Alpha required: " + alpha.toString());
}
@PostConstruct
public void init() {
}
}
如果有Alpha.requireAlpha();
// ...
// (Code that requires Alpha to be initialized first.)
类扩展ChildAlpha
你真正想要初始化(而不是父类),请确保在{{1}中使用“ChildAlpha”和EL表达式(Alpha
)。