0

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

现在我在这一行的 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不符合注射条件。在您的情况下,您尝试通过 注入您的服务@ManagedProperty,这会产生 NPE,正如 Luiggi 在对您最初问题的评论中告诉您的那样。

在当前的 JSF 版本中,您在转换器中注入服务所能做的就是放弃使用@FacesConverter并转而使用标准@ManagedBean注释,因此不是通过 id 而是通过 bean 名称来引用您的转换器,例如 in converter="#{currencyConverter}".

于 2013-04-01T05:50:34.547 回答