Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf CDI@products具有多个属性文件_Jsf_Cdi_Inject_Resourcebundle - Fatal编程技术网

Jsf CDI@products具有多个属性文件

Jsf CDI@products具有多个属性文件,jsf,cdi,inject,resourcebundle,Jsf,Cdi,Inject,Resourcebundle,感谢这篇文章,我现在使用CDI在我的@Named bean中提供msg,如下所示: @RequestScoped public class BundleProducer { @Produces public PropertyResourceBundle getBundle() { FacesContext context = FacesContext.getCurrentInstance(); return context.getApplication().evaluateEx

感谢这篇文章,我现在使用CDI在我的@Named bean中提供msg,如下所示:

@RequestScoped
public class BundleProducer {

@Produces
public PropertyResourceBundle getBundle() {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getApplication().evaluateExpressionGet(context, "#{msg}", PropertyResourceBundle.class);
    }
}
使用类似注入的:

@Inject
private PropertyResourceBundle bundle;

问题:如果我有更多属性文件,我该怎么办:
ui.properties
admin.properties
…?

我只需使用分类器注释来选择要注入的包。摘自我的一个小项目:

注释:

@Qualifier
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface Bundle {
   @Nonbinding
   public String value() default "";
}
生产者方法(根据您的上下文需要进行调整):

注射:

@Inject @Bundle("ui")
private ResourceBundle uiResources;

我个人会尽量减少MessageBundle的数量,并使用“复合键”(ui.xxx,admin.yyy)不知道这是否是最佳实践,但这对我来说很有用。我也在寻找关于这一点的最佳实践。首先,我建议您制作
ResourceBundle
,而不是特定的
属性ResourceBundle
。然后您可以使用CDI限定符来区分各种捆绑包。酷,简单但灵活。@mtj我有以下异常:
生命周期处理期间的异常org.glassfish.deployment.common.DeploymentException:CDI部署失败:WELD-001408:注入点处带有限定符@Bundle的ResourceBundle类型的未满足依赖项[BackedAnnotatedField]@Inject@Bundle private com.mypckage.MyBean.uiResources
任何帮助please@Hicham您可以按现在的状态发布代码吗?Bundle接口
package com.locale
导入java.lang.annotation.ElementType
导入java.lang.annotation.Retention
导入java.lang.annotation.RetentionPolicy
导入java.lang.annotation.Target
导入javax.enterprise.util.Nonbinding
导入javax.inject.Qualifier
@Qualifier
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
公共接口包{
`Nonbinding``公共字符串值()默认值”“;`code>}
BundleProducer
package com.locale;导入java.util.ResourceBundle;导入javax.enterprise.inject.products;导入javax.enterprise.inject.spi.InjectionPoint;公共类BundleProducer{atBundle公共资源Bundle loadBundle(注入点ip){String bundleName=ip.getAnnotated().getAnnotation(Bundle.class).value();ResourceBundle res=ResourceBundle.getBundle(bundleName);返回res;}
使用ResourceBundle
@Inject@Bundle(“用户”)私有BundleProducer uiResources
@Inject @Bundle("ui")
private ResourceBundle uiResources;