3

こんにちは、次のコードで問題が発生しています。

<h:selectOneMenu id="selectTipoAutorizacion"
                                                    value="#{autorizacion.codigoTipoAutorizacion}"
                                                    required="true">
                                                    <f:selectItems
                                                        value="#{cc.attrs.controller.getListaTiposAutorizacion(autorizacion)}"
                                                        var="tipoAutorizacion"
                                                        itemLabel="#{tipoAutorizacion.nombreTipoAutorizacion}"
                                                        itemValue="#{tipoAutorizacion.id.codigoTipoAutorizacion}" />

                                                    <a4j:ajax event="change" execute="@this"
         listener = #{myListener.listener}                                                                                      render="selectAutorizador" />
                                                </h:selectOneMenu>

問題は、デフォルトで選択された値が常にタグの最初の値であるということです。そして、それはユーザーを悩ませています。選択したアイテムの値に基づいて一部のデータが読み込まれるためです...ただし、その情報は変更イベント(a4j:ajaxタグ)が発生するまで読み込まれないため、ユーザーは別のアイテムを選択する必要があります。次に、前のものを選択して、デフォルトのアイテム関連情報を表示します。

最初にデフォルトのアイテム関連情報をロードすることで問題に対処しましたが、ユーザーはこれを好みません。混乱を招く可能性があるからです。だから問題は...どうすればその行動を避けることができますか?私が欲しいのは、selectOneMenuを明確な値でロードすることです(f:selectItemsがなかった場合のように)。どうもありがとう。

4

3 に答える 3

8

あなたのフィールドは必須です。この場合、デフォルトで有効なものは何もないはずです。リストの一番上に空のselectItemを追加しますselectItems.add(0, new SelectItem("", ""))。; またはこの方法:<f:selectItem itemValue="" itemLabel="" /> デフォルトでは、空のselectItemが選択されます。required="true"は空の選択を許可しないため、ユーザーは選択を強制されます。

于 2012-06-20T14:11:26.797 に答える
2

Beanの(ポスト)コンストラクターに必要なデータをプリロードするだけです。

if (codigoTipoAutorizacion != null) {
    // Preload all other desired data as well.
}
于 2012-06-19T21:24:11.627 に答える
2

f:selectItemsの前にf:selectItemを追加し、値を空にするか、「please select ...」のようにして、選択不可としてマークします。

于 2012-06-19T22:10:01.067 に答える