从Select one菜单中选择Custom Object JSF Converter Exception



我想从选择一个菜单中选择自定义对象。它既不显示错误也不显示值。该怎么办?请帮帮我。提前感谢。

现在我看到空指针异常在getAsObject在这一行:

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

从很多问题和答案中可以看出,在这里,@FacesConverter不符合注射条件。在您的情况下,您尝试通过@ManagedProperty注入您的服务,这会产生NPE,正如Luiggi在您最初问题的评论中告诉您的那样。

在当前的JSF版本中,要在转换器中注入服务,您所能做的就是放弃使用@FacesConverter,转而使用标准的@ManagedBean注释,这样就不是通过id,而是通过bean名称来引用转换器,就像在converter="#{currencyConverter}"中一样。

最新更新