gpt4 book ai didi

jsf - 如何在 f :selectItem(s) 中使用枚举值

转载 作者:行者123 更新时间:2023-12-03 04:49:53 25 4
gpt4 key购买 nike

我想创建一个 selectOneMenu 下拉列表,以便我可以选择问题的状态。考虑到如果枚举的顺序发生变化并且列表很大会发生什么,是否可以使 f:selectItem 更加灵活?我可以做得更好吗?是否可以自动“选择”问题所包含的项目?

枚举类

public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}

问题实体

@Enumerated(EnumType.STRING)
private Status status;

JSF

<div class="field">
<h:outputLabel for="questionStatus" value="Status" />
<h:selectOneMenu id="questionStatus" value="#{bean.question.status}" >
<f:selectItem itemLabel="Submitted" itemValue="0" />
<f:selectItem itemLabel="Rejected" itemValue="1" />
<f:selectItem itemLabel="Approved" itemValue="2" />
</h:selectOneMenu>
<hr />
</div>

最佳答案

JSF 有一个内置转换器 enum ,所以应该这样做:

@Named
@ApplicationScoped
public class Data {

public Status[] getStatuses() {
return Status.values();
}

}

<h:selectOneMenu value="#{bean.question.status}" >
<f:selectItems value="#{data.statuses}" />
</h:selectOneMenu>

(注意:从 JSF 2.0 开始,不再需要提供 SelectItem[]List<SelectItem>T[]List<T> 也被接受,您可以通过 var 访问当前项目。属性)

如果您碰巧使用JSF实用程序库OmniFaces ,那么你可以使用 <o:importConstants> 而不是 bean 。

<o:importConstants type="com.example.Status" />

<h:selectOneMenu value="#{bean.question.status}" >
<f:selectItems value="#{Status}" />
</h:selectOneMenu>

如果您也想控制标签,可以将它们添加到 Status枚举:

public enum Status {

SUBMITTED("Submitted"),
REJECTED("Rejected"),
APPROVED("Approved");

private String label;

private Status(String label) {
this.label = label;
}

public String getLabel() {
return label;
}

}

<f:selectItems value="#{data.statuses}" var="status"
itemValue="#{status}" itemLabel="#{status.label}" />

或者,更好的是,将枚举值设置为本地化资源包的属性键(需要 EL 3.0):

<f:selectItems value="#{data.statuses}" var="status"
itemValue="#{status}" itemLabel="#{text['data.status.' += status]}" />

将其放在与资源包关联的属性文件中 #{text}

data.status.SUBMITTED = Submitted
data.status.REJECTED = Rejected
data.status.APPROVED = Approved

关于jsf - 如何在 f :selectItem(s) 中使用枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229638/

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