gpt4 book ai didi

java - 在 JSF 1.2 中创建动态 ENUM 菜单标签

转载 作者:行者123 更新时间:2023-12-01 23:48:34 24 4
gpt4 key购买 nike

我正在解决这个问题,因为它有点破坏了我的模块化。我正在使用 JSF 1.2,并面临使用 h:selectOneMenu 来选择一组给定枚举的一个值。

例如

public enum State {    
A,B,C;
};

例如,我会做某事。像这样:

<h:selectOneMenu>
<f:selectItem itemValue="A" itemLabel="text" />
<f:selectItem itemValue="B" itemLabel="text" />
<f:selectItem itemValue="C" itemLabel="text" />
</h:selectOneMenu>

所以我正在寻找一种方法(例如自定义标签)来使其更通用。

关于 View 组件,我希望将所有可用选项作为菜单中的独立 f:selectItem 获取。

可用的选择可以通过列表或某物传递。否则。

我尝试的第一种方法是为我的 selectItems 使用 a4j:repeat 标记,并将一组选项传递给该标记,但我得到的唯一结果是一个空菜单。

我的想法是某种自定义标签,如下所示:

<namespace:enumMenu enumValues="#{values}" value=#{value}" />

考虑传递的一组具有值 A、B、C、D 的枚举,它应该会产生某种结果。喜欢

    <h:selectOneMenu value=#{value}>
<!-- REPEAT for every enum Item in the passed #values -->
<f:selectItem itemValue="A" />
<f:selectItem itemValue="B" />
<f:selectItem itemValue="C" />
<f:selectItem itemValue="D" />
</h:selectOneMenu>

感谢每一次帮助

最佳答案

<a4j:repeat>失败,因为<f:xxx>组件必须在 View 构建期间可用才能插入组件树中,但是 <a4j:repeat>在 View 渲染期间运行。您需要JSTL <c:forEach>相反。

<h:selectOneMenu ...>
<c:forEach ...>
<f:selectItem />
</c:forEach>
</h:selectOneMenu>

另请参阅:

<小时/>

另一种方法是仅使用 <f:selectItems> 。 JSF 1.2 有一个内置的 enum converter ,所以您需要的是:

private State selectedState; // +getter+setter
private SelectItem[] availableStateItems; // +getter (no setter necessary!)

@PostConstruct
public void init() {
State[] availableStates = State.values();
availableStateItems = new SelectItem[availableStates.length];

for (int i = 0; i < availableStates.length; i++) {
availableStateItems[i] = new SelectItem(availableStates[i]);
}
}

<h:selectOneMenu value="#{bean.selectedState}">
<f:selectItems value="#{bean.availableStateItems}" />
</h:selectOneMenu>

您甚至可以输入 availableStateItems在完全独立的应用程序范围的托管 bean 中,以便可用项目列表在应用程序的生命周期内仅初始化一次。

请注意,上面的答案是针对 JSF 1.2 的,因为 JSF 2.x 您不需要将其转换为 SelectItem[]不再了,就State[]State.values() 获得已经足够了。

另请参阅:

关于java - 在 JSF 1.2 中创建动态 ENUM 菜单标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16634877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com