Primefaces JSF java.lang.NullPointerException: Argument Error: Parameter text is null

11,301

You are not getting values properly from your loadNames() into your bottom loop.

Example :

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

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

will return null.

You need to change your loop like that :

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());
    }
}
Share:
11,301
Jacob
Author by

Jacob

Downvote, at no time in the past or hitherto; not ever.

Updated on July 20, 2022

Comments

  • Jacob
    Jacob almost 2 years

    I am using JSF 2.0 with Primefaces 3.4.2,when I run my application, I am getting the following exception

    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 Code Snippet

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

    And in my 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));
        }
    

    }

  • Jacob
    Jacob almost 11 years
    Alexandre Lavoie it worked. Thanks a lot for pointing it correctly. Appreciated.