【问题标题】:Primefaces JSF java.lang.NullPointerException: Argument Error: Parameter text is nullPrimefaces JSF java.lang.NullPointerException:参数错误:参数文本为空
【发布时间】:2013-05-24 04:45:02
【问题描述】:

我正在使用 JSF 2.0 和 Primefaces 3.4.2,当我运行我的应用程序时,我收到以下异常

java.lang.NullPointerException: Argument Error: Parameter text is null
    at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.writeText(HtmlResponseWriter.java:877)
    at org.primefaces.component.datatable.DataTableRenderer.encodeFilter(DataTableRenderer.java:450)
    at org.primefaces.component.datatable.DataTableRenderer.encodeColumnHeader(DataTableRenderer.java:360)
    at org.primefaces.component.datatable.DataTableRenderer.encodeThead(DataTableRenderer.java:551)
    at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:218)
    at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:192)
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:74)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

JSF 代码片段

 <p:column id="empName" headerText="Name"  filterBy="#{emp.empName}"  
                            filterOptions="#{myMB.empFilter}"  
                            filterMatchMode="exact">
                            <h:outputText value="#{emp.empName}"/> 
                        </p:column>

在我的 ManagedBean 中

public Map<String,String> loadNames() {    
        names = new LinkedHashMap<String,String>();
        names.put("Smith", "S");
        names.put("Jones", "J");        
        return names;    
    }

private SelectItem[] empFilter;

public void init() {
empFilter= new SelectItem[loadNames().size() + 1];
        empFilter[0] = new SelectItem("", "Select");
        for (int i=1; i< empFilter.length; i++) {
            empFilter[i] = new SelectItem(loadNames().get(i-1), loadNames().get(i-1));
    }

}

【问题讨论】:

  • 您的表从 bean 接收到什么值?
  • @AlexandreLavoie 你的意思是JSF数据表还是数据库表?我有来自 LinkedHashMap 的静态值。
  • 在这个#{emp.empName} emp 中应该是 p:dataTable var,但我没有看到您的 bean 中的任何对象具有 empName getter/setter。
  • @AlexandreLavoie emp 确实是 p:dataTable var &lt;p:dataTable id="dataTable" var="emp" lazy="true"
  • @AlexandreLavoie 我注意到当我从 Map&lt;String,String&gt; 更改并使用 List&lt;String&gt; empList; 时没有错误,我可以在 JSF 页面中看到下拉值。

标签: jsf jsf-2 primefaces


【解决方案1】:

您没有从loadNames() 正确获取值到您的底部循环中。

例子:

Map<String,String> map = new LinkedHashMap<String,String>();
map.put("Smith", "S");
map.put("Jones", "J");

System.out.println(map.get(0));

将返回null。

你需要像这样改变你的循环:

public void init()
{
    empFilter= new SelectItem[loadNames().size() + 1];
    empFilter[0] = new SelectItem("", "Select");
    int i = 1;

    for(Map.Entry<String,String> entry : loadNames().entrySet())
    {
        empFilter[i++] = new SelectItem(entry.getKey(),entry.getValue());
        System.out.println(entry.getKey() + "/" + entry.getValue());
    }
}

【讨论】:

  • Alexandre Lavoie 成功了。非常感谢您正确指出。赞赏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多