【问题标题】:Pick Custom Object from Select one menu JSF Converter Exception [duplicate]从选择一个菜单中选择自定义对象 JSF Converter Exception [重复]
【发布时间】:2013-03-31 19:59:44
【问题描述】:

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

现在我在这一行的 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);
    }
}**

【问题讨论】:

    标签: jsf jsf-2 selectonemenu


    【解决方案1】:

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

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

    【讨论】:

    • 这两种方式都不起作用。 :(
    • 如果您足够注意所写的​​内容,您将能够得到答案。只要一步一步做,就会成功的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多