java - 如何在枚举中不存在的 selectOne 中显示值?

标签 java jsf-2 enums selectonemenu

在我的页面上,我有一个下拉列表,其值是根据枚举填充的,并且选择也设置了枚举的值。我现在需要在下拉列表中显示诸如“请选择一个值”之类的文本,而枚举中不存在该文本。

用户也可以不从下拉列表中选择任何值。

如果用户未选择值(用户这样做是合法的),如何在不修改枚举的情况下使用此附加文本填充 selectOne 并在托管 bean 中处理它。我尝试了各种组合,但对我没有任何效果。

这是我正在使用的标准下拉列表,其中填充了不同的枚举值,只是一种标准方式。

这里是枚举

public enum Fruit {
    APPLE("Apple"), ORANGE("Orange");

    private String label;

    Fruit(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }   

}

托管 Bean

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.model.SelectItem;

@ManagedBean
public class Simplebean {

    private Fruit selectedFruit;// How would this work if the value is not valid enum .
    private List<SelectItem>fruits = new ArrayList<SelectItem>();

    @PostConstruct
    public void init(){
        for (Fruit fruit : Fruit.values()){
            fruits.add(new SelectItem(fruit,fruit.getLabel()));// How to add a value not part of enum.
        }
    }

    public List<SelectItem> getFruits() {
        return fruits;
    }

    public void setFruits(List<SelectItem> fruits) {
        this.fruits = fruits;
    }

    public Fruit getSelectedFruit() {
        return selectedFruit;
    }

    public void setSelectedFruit(Fruit selectedFruit) {
        this.selectedFruit = selectedFruit;
    }

}

在 XHTML 中

<h:selectOneMenu value="#{simplebean.selectedFruit}">
    <f:selectItems value="#{simplebean.fruits}" />
</h:selectOneMenu>

最佳答案

你可以像 Luggi 写的那样做,但是添加一个 noSelectionOption附加<f:selectItem> .还有一个建议 - 您不需要定义 selectItem 列表 List<SelectItem>fruits再在支持 bean 上,你可以这样做:

<h:selectOneMenu value="#{simplebean.selectedFruit}">
    <f:selectItem itemLabel="Select a value" noSelectionOption="true"/>
    <f:selectItems value="#{simplebean.fruits}" var="fruit" itemLabel="#{fruit.label}" itemValue="#{fruit}"/>
</h:selectOneMenu>

没有水果的支持bean selectItems:

@ManagedBean
public class Simplebean {

    private Fruit selectedFruit;

    public Fruit getSelectedFruit() {
        return selectedFruit;
    }

    public void setSelectedFruit(Fruit selectedFruit) {
        this.selectedFruit = selectedFruit;
    }

    public Fruit[] getFruits() {
        return Fruit.values();
    }
}

关于java - 如何在枚举中不存在的 selectOne 中显示值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10160000/

相关文章:

java - 从 Java 过渡到 Google App Engine

java - 杀死 screen 但java进程没有结束

java - 表单验证和提交(java测试用例)

java - 禁用 JFileChooser 中的打开按钮?

java - 更改java版本

jsf - JSF 是否支持 MVVM 设计模式?

java - Arquillain/Shrinkwrap 如何添加整个 META-INF 目录?

swift - 在 Swift 中,是否可以将字符串转换为枚举?

swift - 如何在 IF 条件下获取枚举的参数值?

ios - 将 Int 传递给枚举并返回一个 String