我需要一个解决方案来填充代码SelectOneMenu使用一些元数据指定为该组件的属性。
这是我的详细要求。
1)开发人员将指定如下内容:
<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}">
<f:attribute name="entity" value="somepackage.SomeEntity" />
</h:selectOneMenu>
2)第一次请求包含上述内容的页面时,服务器应该能够读取'entity'属性
3)一旦读取了'entity',服务器就会动态地填充' someecomponent '。
我对应该使用'entity'属性并生成要在' someecomponent '中显示的内容的代码没有问题。我的问题是找到合适的地方有效地调用这段代码。
我已经尝试了"渲染响应阶段后"的PhaseEventListener,但没有运气。由于我是JSF的新手,看起来我遗漏了一些基本的东西。
有人经历过同样的实验吗?
提前谢谢你。
尤尼斯Ouadi
如果你的目标是一个支持带参数调用方法的EL 2.2容器,并且/或者在你的web应用程序中提供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。