【问题标题】:Populate by code SelectOneMenu based on custom meta-data in attributes根据属性中的自定义元数据通过代码 SelectOneMenu 填充
【发布时间】:2011-08-25 21:53:16
【问题描述】:

我需要一个解决方案,使用指定为该组件属性的某些元数据通过代码 SelectOneMenu 填充。

这是我的要求的详细信息。

1) 开发人员会指定如下内容:

<h:selectOneMenu id="someComponent" value="#{someController.someModel.someField}">
    <f:attribute name="entity" value="somepackage.SomeEntity" />
</h:selectOneMenu>

2)当第一次请求包含上述内容的页面时,服务器应该能够读取'entity'属性

3) 读取“实体”后,服务器将执行必要的动态填充“someComponent”。

我对应该使用“entity”属性并生成要在“someComponent”中显示的内容的代码没有任何问题。我的问题是找到合适的地方来有效地调用这段代码。

我已经为“渲染响应阶段之后”尝试了 PhaseEventListener,但没有运气。由于我是 JSF 的新手,因此我似乎遗漏了一些基本的东西。

有人做过同样的实验吗?

提前谢谢你。

尤尼斯·瓦迪

【问题讨论】:

  • 您的目标是 Servlet 3.0/EL 2.2 容器吗?
  • 我的开发环境是Tomcat 7,所以如你所说。但是,如果可能的话,我更喜欢一个对带有 Servlet 2.5 和 EL 2.1 的容器也有效的解决方案。

标签: jsf dynamic populate selectonemenu


【解决方案1】:

如果您的目标是支持使用参数调用方法的 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。

【讨论】:

  • 我看到了你的解决方案。但是,它更多地面向开发人员而不是页面作者。我更喜欢使用元数据(通过 )。没关系,非常感谢您的及时回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
相关资源
最近更新 更多