从选择一个菜单中选择定制对象JSF Converter Exception [英] Pick Custom Object from Select one menu JSF Converter Exception

查看:129
本文介绍了从选择一个菜单中选择定制对象JSF Converter Exception的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

i want to pick custom object from select one menu. it neither shows an error nor values. what to do? please help me. thanks in advance.

现在我在此行的getAsObject上看到Null指针异常:

Now i'm seeing Null pointer exception at getAsObject at this line:

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在对初始问题的评论中告诉您的那样.

As it can be seen in many questions, and their answers, here, @FacesConverter is not eligible for injection. In your case, you try to inject your service via @ManagedProperty, which yields NPE, as Luiggi told you in a comment to your initial question.

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

With the current JSF release, all you can do to inject services in your converters is to give up using @FacesConverter and switch to using standard @ManagedBean annotation, thus referring to your converter not by id, but by bean name, like in converter="#{currencyConverter}".

这篇关于从选择一个菜单中选择定制对象JSF Converter Exception的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆