我需要一个解决方案来填充代码SelectOneMenu,使用一些指定为此组件属性的元数据。
以下是我要求的详细信息。
1)开发人员会指定一些这样的东西:
<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}">
<f:attribute name="entity" value="somepackage.SomeEntity" />
</h:selectOneMenu>
2)当第一次请求包含上述内容的页面时,服务器应该能够读取“实体”属性
3)一旦读取了'entity',服务器就会需要动态填充'someComponent'。
我对使用'entity'属性并生成要在'someComponent'中显示的内容的代码没有任何问题。我的问题是找到合适的地方来有效地调用这段代码。
我已经为'渲染响应阶段'尝试了PhaseEventListener,但没有运气。看起来我缺少一些基本的东西,因为我是JSF的新手。
有人经历过相同的实验吗?
提前谢谢。
Younes Ouadi
答案 0 :(得分:0)
如果您的EL 2.2容器支持使用参数调用方法和/或使用您的webapp提供JBoss EL,以便它也能在EL 2.1上运行,那么应该可以使用以下结构:
<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}">
<f:selectItems value="#{someProvider.selectItems('somepackage.SomeEntity')}" />
</h:selectOneMenu>
与
public List<SelectItem> getSelectItems(String className) {
// ...
}
我将介绍一些延迟加载和/或基于请求的缓存机制,以及在bean的生命周期内可以多次调用getter。