我目前使用定义如下的自定义标记:
<ui:composition>
<ui:param name="value" value="#{value}" />
<ui:param name="collection" value="#{collection}" />
<h:selectOneMenu value="#{value}">
<f:selectItems value="#{collection}" />
<f:converter binding="#{myConverter}"/>
</h:selectOneMenu>
</ui:composition>
问题是对于所有facelets,#{collection}
属性的值将是相同的。因此,我希望避免ManagedBean
中的样板代码来检索相同的List<SelectItem>
。现在,我倾向于创建ManagedBean
ApplicationScope
,List<SelectItem>
只能在标记中使用(即它的职责是构建sql
)。
但我认为这与封装相反。问题是标签的客户不必了解bean。我会将其形成为具有预定义值的自定义组件,但从JSF-standpoint看来,从UIComponent
类实现执行List<SelectItem>
- 查询似乎不可能和正确(构造{{ 1}}需要执行一些sql
- 语句。
最适合的解决方案是什么?