根据属性中的自定义元数据,按代码SelectOneMenu填充

时间:2011-08-25 12:33:31

标签: jsf dynamic populate selectonemenu

我需要一个解决方案来填充代码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

1 个答案:

答案 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。