На моей странице у меня есть раскрывающийся список, значения которого заполняются на основе перечисления, и выбор также устанавливает значение перечисления. Теперь у меня есть требование отображать текст типа «Пожалуйста, выберите значение» в раскрывающемся списке, которого нет в перечислении.
Пользователь также может не выбирать значение из раскрывающегося списка.
Как можно заполнить selectOne этим дополнительным текстом без изменения перечисления и обработать его в управляемом компоненте, если пользователь не выбирает значение (что разрешено для пользователя). Я пробовал разные комбинации, но у меня ничего не получалось.
Вот то, что у меня есть, это стандартный выпадающий список, заполненный перечислением разных значений стандартным способом.
Это перечисление здесь
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;
}
}
Управляемый компонент
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>