【发布时间】:2015-07-05 09:08:58
【问题描述】:
我正在开发一个新的 JSF 2.2 应用程序。
我有一个热切创建的应用程序范围托管 bean,它在启动时从外部文件加载一些配置数据,并将其存储为状态。
我有一个 FacesComponent 和 FacesRenderer 静态工作。
我希望能够将托管 bean 中存储的配置数据获取到 FacesComponent。有没有标准的方法来做到这一点。
据我所知,托管 bean 无法注入到组件中 - 对吗?
我可以尝试在使用自定义组件的 .xhtml 文件中使用属性和 el 将数据导入自定义组件,例如
<my:customComponent data="#{managedBean.loadedData}"/>
但这似乎是一种非常倒退的做事方式,实际上向组件用户公开了组件的内部实现。
如果有其他方法,或者您需要更多信息,请告诉我。
更新:@BalsusC 我已经尝试了你的建议
我有一个加载器,它将加载的数据放入持有者对象中
@Named
@ApplicationScoped
public class Loader implements Serializable {
@Inject
private Holder holder
@PostConstruct
public void init() {
// Load data into the holder here
}
}
持有者是另一个应用程序范围的bean
@Named
@ApplicationScope
public class Holder {...}
加载数据时,Holder 实例被正确注入到 Loader 中。
但是当我他们以下时
@Named //Makes no difference if this is here or not
@FacesComponent(value="family", createTag=true, namespace="...namespace...", tagName="tag")
public class Component extends UIComponentBase {
@Inject
public class Holder holder;
@Override
public void encodeBegin(FacesContext context) {
holder.getData();
}
}
当组件渲染时,没有注入持有者,我得到一个空指针异常。我尝试在没有 @Named 注释的情况下使用相同的结果。
我做错了吗?能否请教一下。
【问题讨论】:
-
澄清:“静态工作”是指组件使用固定数据。我正在尝试使用启动时加载的配置使其动态化。
标签: jsf jsf-2 jsf-2.2 custom-component managed-bean