2

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));
    }

}

12
  • What is your table receiving as value from the bean? Commented May 24, 2013 at 6:03
  • @AlexandreLavoie You mean JSF datatable or database table? I have static values which is from LinkedHashMap. Commented May 24, 2013 at 6:09
  • 1
    In this #{emp.empName} emp should be the p:dataTable var, but I don't see any object in your bean having a empName getter/setter. Commented May 24, 2013 at 6:11
  • @AlexandreLavoie emp is indeed p:dataTable var <p:dataTable id="dataTable" var="emp" lazy="true" Commented May 24, 2013 at 6:26
  • 1
    @AlexandreLavoie I have noticed that when I changed from Map<String,String> and use List<String> empList; then there are no errors and I could see the values as drop down in JSF page. Commented May 24, 2013 at 7:38

1 Answer 1

4

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());
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

Alexandre Lavoie it worked. Thanks a lot for pointing it correctly. Appreciated.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.