jakarta-ee-JSF 2.2:@NoneScopedbean,注入到另一个更广泛范围的ManagedBean中,



我相信这个问题可能已经在其他一些线程中得到了回答,但到目前为止,我仍然无法使它与我的配置一起工作。

据我所知,注入另一个@NoneScopedbean的时间将与AcceptorBean的范围一样长。

到目前为止,这是真的。。。除了在Acceptor Bean的@PostConstruct方法期间Bean似乎还不可用之外。

例如,假设我们有一个基本抽象beanBaseScopedBean,带有以下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 + '!';
      }
  }
}

然后,我们定义了一个@ApplicationScopedbean,它扩展了BaseScopedBean,并在@PostConstruct操作期间尝试访问resourceBundleProvider

@ManagedBean
@ApplicationScoped
public class MenuBean extends BaseScopedBean {
  @PostConstruct
  public void init() {
      System.out.println(getResourceBundleProvider());
  }
}

@PostConstruct中的System.out.println(resourceBundleProvider(打印NULL

但是,稍后在从Facelet EL表达式调用的方法中访问resourceBundleProvider时,会返回一个有效的已创建实例。

问题是:这是预期的行为吗我认为resourceBundleProvider托管属性应该已经在@PostConstruct中可用。

我将WildFly 8.2.0.FinalApache Myfaces 2.2.7一起使用,而不是最初的Mojarra实现。

有什么想法吗?

提前感谢!!

事实证明,到目前为止,对于Apache MyFaces 2.2.7(可能还有2.2.8(,这似乎是一个错误。。。之前在2.1.x版本中进行了修复!!

对于Mojarra(至少2.2.12(,行为是预期的。

相关内容

  • 没有找到相关文章