Comparator doesn't consider null values
---------------------------------------
Key: RF-10189
URL:
https://issues.jboss.org/browse/RF-10189
Project: RichFaces
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: component-tables
Affects Versions: 4.0.0.Milestone5
Environment: * RichFaces 4.0.0-SNAPSHOT r.20958
* Metamer 4.0.0-SNAPSHOT r.20964
* Mojarra 2.0.3-b05
* JBoss AS 6.0.0.Final
* OpenJDK Runtime Environment 1.6.0_20-b20 @ Linux
* Firefox 3.6.13 @ Linux x86_64
Reporter: Lukas Fryc
See also [Steps to Reproduce] to reproduce it in Metamer.
I have model which contains null values in one column and when I want to sort by such
column, I want to let RichFaces consider it and sort it on the end of the.
The java.lang.Comparable itself [1] states that the NullPointerException should be thrown
when comparing object to null value.
However for user convenience, it will be better to handle null values in consistent way to
avoid necessity for defining custom comparator.
[1]
http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html
java.lang.NullPointerException
at java.util.Date.getMillisOf(Date.java:956)
at java.util.Date.compareTo(Date.java:976)
at java.util.Date.compareTo(Date.java:129)
at org.richfaces.model.ArrangeableModel.compareSortByValues(ArrangeableModel.java:328)
at org.richfaces.model.ArrangeableModel.compare(ArrangeableModel.java:309)
at org.richfaces.model.ArrangeableModel.access$200(ArrangeableModel.java:52)
at org.richfaces.model.ArrangeableModel$2.compare(ArrangeableModel.java:262)
at java.util.Arrays.mergeSort(Arrays.java:1283)
at java.util.Arrays.mergeSort(Arrays.java:1294)
at java.util.Arrays.mergeSort(Arrays.java:1294)
at java.util.Arrays.mergeSort(Arrays.java:1295)
at java.util.Arrays.mergeSort(Arrays.java:1294)
at java.util.Arrays.mergeSort(Arrays.java:1294)
at java.util.Arrays.sort(Arrays.java:1223)
at java.util.Collections.sort(Collections.java:176)
at org.richfaces.model.ArrangeableModel.sort(ArrangeableModel.java:260)
at org.richfaces.model.ArrangeableModel.arrange(ArrangeableModel.java:214)
at
org.richfaces.component.UIDataTableBase.createExtendedDataModel(UIDataTableBase.java:170)
at org.richfaces.component.UIDataAdaptor.getExtendedDataModel(UIDataAdaptor.java:560)
at org.richfaces.component.UIDataAdaptor.getRowCount(UIDataAdaptor.java:607)
at
org.richfaces.renderkit.AbstractTableRenderer.encodeTableRows(AbstractTableRenderer.java:147)
at
org.richfaces.renderkit.AbstractTableRenderer.doEncodeChildren(AbstractTableRenderer.java:209)
at org.richfaces.renderkit.RendererBase.encodeChildren(RendererBase.java:157)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at org.richfaces.renderkit.DataTableRenderer.encodeRow(DataTableRenderer.java:183)
at org.richfaces.renderkit.AbstractRowsRenderer.process(AbstractRowsRenderer.java:62)
at org.ajax4jsf.model.SequenceDataModel.walk(SequenceDataModel.java:109)
at org.richfaces.component.UIDataAdaptor.walk(UIDataAdaptor.java:918)
at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:72)
at
org.richfaces.renderkit.AbstractTableRenderer.encodeRows(AbstractTableRenderer.java:102)
at
org.richfaces.renderkit.AbstractRowsRenderer.processRows(AbstractRowsRenderer.java:80)
at
org.richfaces.renderkit.AbstractTableRenderer.encodeTableRows(AbstractTableRenderer.java:159)
at
org.richfaces.renderkit.AbstractTableRenderer.doEncodeChildren(AbstractTableRenderer.java:209)
at org.richfaces.renderkit.RendererBase.encodeChildren(RendererBase.java:157)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at
org.richfaces.context.ExtendedPartialViewContextImpl$RenderVisitCallback.visit(ExtendedPartialViewContextImpl.java:517)
at
org.richfaces.context.BaseExtendedVisitContext.invokeVisitCallback(BaseExtendedVisitContext.java:480)
at org.richfaces.component.UIDataAdaptor.visitTree(UIDataAdaptor.java:1343)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1487)
at javax.faces.component.UIForm.visitTree(UIForm.java:331)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1487)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1487)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1487)
at
org.richfaces.context.ExtendedPartialViewContextImpl.processPartialRenderPhase(ExtendedPartialViewContextImpl.java:284)
at
org.richfaces.context.ExtendedPartialViewContextImpl.processPartial(ExtendedPartialViewContextImpl.java:206)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:968)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:378)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:269)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.richfaces.tests.metamer.TestIdentityFilter.doFilter(TestIdentityFilter.java:93)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:636)
Jan 12, 2011 2:28:15 PM
org.richfaces.context.ExtendedPartialViewContextImpl$RenderVisitCallback logException
SEVERE: null
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira