2015-07-06 86 views
0

我相信這個問題可能已經在一些其他線程已回答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,而不是原來的鑽嘴魚科實施。

任何想法?

非常感謝!

回答

1

事實證明,到目前爲止,與Apache MyFaces的2.2.7(大概2.2.8)這似乎是在2.1.x的版本......以前是固定的錯誤!

隨着鑽嘴魚科(至少2.2.12),該行爲是所預期的。

+0

事實證明,在年底,這個問題更多地依賴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 –

相關問題