0

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

今、次の行の getAsObject で Null ポインター例外が発生しています。

return getCurrencyService().getCurrencyBtId(currencyId);

これは私のxhtmlドキュメントです

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

これは私の managedBean クラスです。

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

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

}

これは私の currencyConverter クラス コードです。

**@FacesConverter("currencyConverter")
public class CurrencyConverter implements Converter {
    @ManagedProperty(value = "#{currencyService}")
    private ICurrencyService currencyService;


    public ICurrencyService getCurrencyService() {
        return currencyService;
    }
    public void setCurrencyService(ICurrencyService currencyService) {
        this.currencyService = currencyService;
    }
    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {

        int currencyId = Integer.valueOf(value);
        return getCurrencyService().getCurrencyBtId(currencyId);
    }
    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
        Currency currency = (Currency) value;
        int currencyId = currency.getCurrencyId();
        return String.valueOf(currencyId);
    }
}**
4

1 に答える 1

0

多くの質問とその回答に見られるように、ここで@FacesConverterは注射の対象外です。あなたの場合、@ManagedPropertyLuiggi が最初の質問へのコメントで言ったように、NPE を生成する 経由でサービスを注入しようとします。

現在の JSF リリースでは、コンバーターにサービスを注入するためにできることは、使用をあきらめて@FacesConverter標準アノテーションの使用に切り替えること@ManagedBeanだけです。したがって、ID ではなく、 のように Bean 名でコンバーターを参照しますconverter="#{currencyConverter}"

于 2013-04-01T05:50:34.547 に答える