【问题标题】:Getting nullpointer exception on orderlist in primefaces在primefaces的orderlist上获取空指针异常
【发布时间】:2013-02-13 12:39:09
【问题描述】:
 Error Rendering View[test.xhtml]
                                 java.lang.NullPointerException
    at org.primefaces.component.orderlist.OrderListRenderer.encodeOptions(OrderListRenderer.java:149)
    at org.primefaces.component.orderlist.OrderListRenderer.encodeList(OrderListRenderer.java:108)
    at org.primefaces.component.orderlist.OrderListRenderer.encodeMarkup(OrderListRenderer.java:79)
    at org.primefaces.component.orderlist.OrderListRenderer.encodeEnd(OrderListRenderer.java:49)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:543)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:315)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:150)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:60)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:44)
    at org.primefaces.component.dialog.DialogRenderer.encodeContent(DialogRenderer.java:174)
    at org.primefaces.component.dialog.DialogRenderer.encodeMarkup(DialogRenderer.java:103)
    at org.primefaces.component.dialog.DialogRenderer.encodeEnd(DialogRenderer.java:41)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:626)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:622)
    at org.primefaces.component.accordionpanel.AccordionPanelRenderer.encodeEnd(AccordionPanelRenderer.java:60)

@FacesConverter("contactConverter") 公共类 ContactConverter 实现 Converter{

@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
        throws ConverterException {
    // TODO Auto-generated method stub
    TestBean tb= new TestBean();
    tb.setName(arg2);
    return tb;
}

@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2)
        throws ConverterException {
    // TODO Auto-generated method stub
    return arg2.toString();
}

我正在使用 primefaces 订单列表示例。但我正面临这个空指针异常。谷歌搜索后,我发现这个问题与转换器有关,但我不确定。任何人都可以帮助我使用转换器的简单 primeface 订单列表。

【问题讨论】:

  • 如果您提及确切的 PrimeFaces 版本会很有帮助,这样我们(或您……)就可以在源代码中查找确切原因。
  • @BalusC:我已经阅读了您的许多与 Jsf2 相关的博客,我发现它非常有用,并且能够解决许多问题。我正在使用 Primefaces 3.4,我正在尝试简单的订单列表示例。

标签: jsf-2 primefaces


【解决方案1】:
java.lang.NullPointerException
    at org.primefaces.component.orderlist.OrderListRenderer.encodeOptions(OrderListRenderer.java:149)
    at org.primefaces.component.orderlist.OrderListRenderer.encodeList(OrderListRenderer.java:108)

来自 PrimeFaces 3.4 OrderListRenderer 源代码:

90     protected void encodeList(FacesContext context, OrderList ol) throws IOException {
...
108        encodeOptions(context, ol, (List) ol.getValue());
...
115    }
...
143    @SuppressWarnings("unchecked")
144    protected void encodeOptions(FacesContext context, OrderList old, List model) throws IOException {
145        ResponseWriter writer = context.getResponseWriter();
146        String var = old.getVar();
147        Converter converter = old.getConverter();
148
149        for(Iterator it = model.iterator(); it.hasNext();) {

因此,model 是 null,因此当 <p:orderList value> 是 null 并因此您的 #{testBean.contacts} 已返回 null 时会发生此异常。确保它不是null。请注意,当在范围内找不到 #{testBean} 时,也会发生这种情况。

【讨论】:

  • 值不为空。必须有转换器吗?我用过转换器。
  • 你看过 PrimeFaces 源代码吗?根据源代码,OrderList#getValue() 已返回null。因此,您的#{testBean.contacts} 已返回null。只需运行调试器自己查看即可。
  • 谢谢。你是绝对正确的!我交叉验证了我的代码。值即将为空。我纠正了它,我可以看到显示的订单列表..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多