2012-04-15 18 views
1

在我的頁面上,我有一個下拉列表,其值根據枚舉進行填充,並且選擇也設置枚舉的值。我現在要求在下拉菜單中顯示「請選擇一個值」這樣的文本,並且不在enum中。如何顯示selectOne中的值不存在於枚舉中?

用戶也可以不從下拉菜單中選擇任何值。

如果用戶沒有選擇一個值(這對用戶來說是合法的),如何使用這個額外的文本填充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> 
+0

嘗試在添加列表時嘗試對值進行硬編碼,而不是從ENUM中獲取值。 – UVM 2012-04-15 06:31:54

回答

3

您可以像Luggi寫的那樣做,但是可以將noSelectionOption添加到額外的<f: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(); 
    } 
} 
1

添加f:selectItem並定義項標籤和項目價值:

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