在我的页面上,我有一个下拉列表,其值是根据枚举填充的,并且选择还设置了枚举的值。我现在需要在下拉列表中显示诸如“请选择一个值”之类的文本,而枚举中不存在该文本。
用户也可以不从下拉列表中选择任何值。
如果用户不选择值(用户这样做是合法的),如何在不修改枚举的情况下使用此附加文本填充 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>