1

私のページには、列挙型に基づいて値が入力されるドロップダウンがあり、選択すると列挙型の値も設定されます。ドロップダウンに「値を選択してください」などのテキストを表示する必要がありますが、列挙型には表示されません。

ユーザーがドロップダウンから値を選択しないことも可能です。

ユーザーが値を選択しない場合、列挙型を変更せずに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>
4

2 に答える 2

3

Luggiが書いたようにそれを行うことができますが、追加のににnoSelectionOptionを追加し<f:selectItem>ます。List<SelectItem>fruitsそして提案として、バッキングBeanでselectItemリストを定義する必要はもうありません。次のように定義できます。

<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>

そして果物のないバッキングビーン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();
    }
}
于 2012-04-15T07:00:18.720 に答える
1

を追加しf:selectItem、アイテムラベルとアイテム値を定義します。

<h:selectOneMenu value="#{simplebean.selectedFruit}">
    <f:selectItem  itemLabel="Select a value" />
    <f:selectItems value="#{simplebean.fruits}" />
</h:selectOneMenu>
于 2012-04-15T06:21:52.837 に答える