0

コンポーネントがice:selectOneMenuあり、ページから選択したIDと値を取得する必要があります。

<ice:selectOneMenu partialSubmit="true" 
 value="#{bean.selectedType}" valueChangeListener="#{bean.listenerSelectedType}">
<f:selectItems value="#{bean.typeValues}"/>
<ice:selectOneMenu/>


public List<?> getTypeValues(){ 
List<SelectItem> returnList = new ArrayList<SelectItem>();
...
//SelectItem item = new SelectItem(id, label);
SelectItem item = new SelectItem("A", "B");

returnList.add(item);
}

public void listenerSelectedType(ValueChangeEvent event) {
    ...
    //The event only has the id ("A")
    //How can I get the label ("B") that is in the page?
}
4

1 に答える 1

0

これは本当です。フォームの送信時に、<select>HTML 要素の値のみがサーバーに送信されます。

しかし、selectOneMenu値属性とラベル属性の両方を設定したのがあなたである限り、作成されたコレクションを繰り返し処理して必要なものを見つければ、ラベルにもアクセスできます。

簡単に言えば、Bean で作成したコレクションを記憶し、それを繰り返し処理してラベルを取得します。これは基本的な例です:

@ManagedBean
@ViewScoped
public void MyBean implements Serializable {

    private List<SelectItem> col;

    public MyBean() {
        //initialize your collection somehow
        List<SelectItem> col = createCollection();//return your collection
        this.col = col;
    }

    public void listenerSelectedType(ValueChangeEvent event) {
        String value = (String)event.getNewValue();
        String label = null;
        for(SelectItem si : col) {
            if(((String)si.getValue()).equals(value)) {
                 label = si.getLabel();
            }
        }
    }

}

ところで、クラス コンストラクターまたは@PostConstrctメソッドでコレクションを初期化してください。ゲッター メソッドでこの (ビジネス) ジョブを実行しないでください。これは悪い習慣です。

また、マップにselectOneMenuas of Map<String, String> optionsmap .String label = options.get(value)<option value, option label><key, pair>

于 2013-02-21T20:27:24.540 に答える