1

1 つのメニューを選択してカスタム オブジェクトを選びたいです。エラーも値も表示されません。私は何をすべきか?

私のxhtmlドキュメント:

<h:panelGrid columns="2">
    <p:outputLabel value="" />
        <p:selectOneMenu id="CurrencyMenu" value="#{CurrencyMB.currency}" >
            <f:selectItem itemLabel="-- Select Currency--" itemValue="#{null}"/>
        <f:selectItems value="#{CurrencyMB.currencyList}" var="currency"  itemValue="#{currency.currencyId}" itemLabel="#{currency.currencyName}" > 
            </f:selectItems>
        <p:ajax update="currencyOut" />
        </p:selectOneMenu>
        <p:outputLabel value="Currency Id : #{CurrencyMB.currency.currencyId}" id="currencyOut" />
</h:panelGrid>

私の管理対象Beanクラス:

@ManagedBean(name = "CurrencyMB")
@RequestScoped
public class CurrencyManagedBean {

private Currency currency;
private List<Currency> currencyList;


public Currency getCurrency() {
        return currency;
    }

public void setCurrency(Currency currency) {
        this.currency = currency;
    }
public List<Currency> getCurrencyList() {
        currencyList = new ArrayList<Currency>();
        currencyList.addAll(getiCurrencyService().getCurrencies());
        return currencyList;
    }

public void setCurrencyList(List<Currency> currencyList) {
        this.currencyList = currencyList;
    }

}
4

2 に答える 2

8

class の Java オブジェクトをCurrency、HTTP 要求パラメーターとして渡される文字列にマップしようとしています。コンバーターは、直面した状況のように、文字列表現からオブジェクトを作成する必要がある場合、またはその逆の場合に使用することを目的としています。

基本的には2つのアプローチがあります。

1. コンバーターを使用します。

このアプローチでは、アイテムの値をCurrencyオブジェクトとして定義し、コンバーターを使用してオブジェクトから文字列表現を作成し、文字列からオブジェクトを再作成します。コンバーター部分については、Luiggi が指摘したチュートリアルに従ってください。基本的に、JSF タグの属性のように、ID でコンバーターを参照できるように、を実装するクラスを作成しConverter、アノテーションを付ける必要があります。@FacesConverter("currencyConverter")converter="currencyConverter"

<p:selectOneMenu id="CurrencyMenu" value="#{CurrencyMB.currency}" converter="currencyConverter">
    <f:selectItems value="#{CurrencyMB.currencyList}" var="currency"  itemValue="#{currency}" itemLabel="#{currency.currencyName}" /> 
    <p:ajax update="currencyOut" />
</p:selectOneMenu>

2. プレーンStrings (または Java プリミティブ ラッパー)を使用します。

このアプローチでは、アイテムの値とユーザーの選択をString、実際のオブジェクトではなく、タイプの Bean プロパティにバインドします。このように使用すると、コンバーターは不要になり、文字列値が設定されます。

<p:selectOneMenu id="CurrencyMenu" value="#{CurrencyMB.currencyName}">
    <f:selectItems value="#{CurrencyMB.currencyList}" var="currency"  itemValue="#{currency.currencyName}" itemLabel="#{currency.currencyName}" /> 
    <p:ajax update="currencyOut" />
</p:selectOneMenu>

最後に、selectOneMenu が ItemLabel をコンバーターに送信するのはなぜですか?.

于 2013-03-31T18:47:27.067 に答える