我相信這個問題可能已經在一些其他線程已回答NULL,但到目前爲止,我還不能管理,使之與我的工作組態。JSF 2.2:一個@NoneScoped豆,注入到另一個更廣泛的範圍內管理Bean是在@PostConstruct
據我所知,一個注入到另一個bean中的bean將會生存在Acceptor Bean的範圍內。
到目前爲止,它是真的......除了看起來Bean在Acceptor Bean的@PostConstruct方法中還沒有提供。
例如,假設我們有一個抽象基豆BaseScopedBean具有以下ManagedProperty注:
public abstract class BaseScopedBean implements IBaseBean {
@ManagedProperty(value = "#{resourceBundleProvider}")
private ResourceBundleProvider resourceBundleProvider;
public void setResourceBundleProvider(ResourceBundleProvider resourceBundleProvider) {
this.resourceBundleProvider = resourceBundleProvider;
}
public ResourceBundleProvider getResourceBundleProvider() {
return this.resourceBundleProvider;
}
}
其中ResourceBundleProvider看起來就像這樣:
@ManagedBean (name = "resourceBundleProvider")
@NoneScoped
public class ResourceBundleProvider {
public ResourceBundle getBundle(String bundleName) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getResourceBundle(context, bundleName);
}
public String getValue(String bundleName, String key) {
try {
return getBundle(bundleName).getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
public String getValue(String bundleName, String key, Object... params) {
try {
return MessageFormat.format(getBundle(bundleName).getString(key), params);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}
然後,我們定義了一個@ ApplicationScoped bean,它繼承了Base ScopedBean,並嘗試一個@PostConstruct操作期間訪問resourceBundleProvider
@ManagedBean
@ApplicationScoped
public class MenuBean extends BaseScopedBean {
@PostConstruct
public void init() {
System.out.println(getResourceBundleProvider());
}
}
的的System.out.println(resourceBundleProvider)在@PostConstruct打印NULL
然而,例如,稍後在從Facelet EL表達式調用的方法中訪問resourceBundle提供 r返回有效的創建實例。
問題:這是預期的行爲?我相信resourceBundleProvider管理屬性應該是在@PostConstruct已經可用。
我使用WildFly 8.2.0.Final與的Apache MyFaces的2.2.7,而不是原來的鑽嘴魚科實施。
任何想法?
非常感謝!
事實證明,在年底,這個問題更多地依賴JBoss的WildFly 8.x的服務器上比MyFaces的...! 8.x在以下類中存在一個錯誤:https://github.com/wildfly/wildfly/blob/8.x/jsf/injection/src/main/java/org/jboss/as/jsf/injection/MyFacesLifecycleProvider .java 已在WildFly 9.x及更高版本中更正: https:// github。COM/wildfly/wildfly /斑點/ 9.x中/ JSF /注射/ SRC /主/ JAVA /組織/ JBoss的/ AS/JSF /注射/ MyFacesLifecycleProvider.java –