Hi!

I encounter a strange behavior of selectBooleanCheckbox component-binding
inside a dataTable. When I select the checkbox in the last row and call an
action method to delete the selected row, the page is redisplayed with all
the remaining checkboxes selected, that had been deselected before.

This happens only if I select the last row/checkbox, not if I select another
row and press delete. I don't modify any component state in the application.
This behavior is independent of setting the selectBooleanCheckbox or the
delete commandButton to false/true.

The behavior described doesn't happen in any possible case, but always when
the options are shown the first time and I select the last one and press
delete.

If this happens, and the checkboxes are all redisplayed in selected state,
and I press delete, a runtime error is thrown because a "row is
unavailable":

02:36:22,218 ERROR [Engine] StandardWrapperValve[Faces Servlet]:
Servlet.service() for servlet Faces Servlet threw exception
javax.faces.FacesException: Error calling action method of component with id
_id1:_id34
        at
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListen
erImpl.java:74)
        at javax.faces.component.UICommand.broadcast(UICommand.java:106)
        at
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
        at
javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:132)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.applyRequestValues(LifecycleImpl.
java:219)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:71)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:237)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:157)
        at
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsF
ilter.java:123)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:186)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:157)
        at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.ja
va:75)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:186)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:157)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:214)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContext
Valve.java:198)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:152)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
        at
org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalVal
ve.java:66)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:102)
        at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssoci
ationValve.java:150)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:102)
        at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:
54)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:102)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137
)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118
)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:102)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex
t.java:104)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java:705)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:683)
        at java.lang.Thread.run(Thread.java:534)
Caused by: javax.faces.el.EvaluationException: Exception while invoking
expression #{ChooseAuswBerechtigteBacking.removeAuswBerechtigte}
        at
org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:153)
        at
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListen
erImpl.java:63)
        ... 42 more
Caused by: java.lang.IllegalArgumentException: row is unavailable
        at javax.faces.model.ListDataModel.getRowData(ListDataModel.java:61)
        at
org.apache.myfaces.component.html.ext.HtmlDataTableHack.getRowData(HtmlDataT
ableHack.java:88)
        at
de.fhzw.portal.umfragesystem.view.backing.management.ChooseAuswBerechtigteBa
cking.getSelectedAuswBerechtigte(ChooseAuswBerechtigt
eBacking.java:502)
        at
de.fhzw.portal.umfragesystem.view.backing.management.ChooseAuswBerechtigteBa
cking.removeAuswBerechtigte(ChooseAuswBerechtigteBack
ing.java:261)
        at sun.reflect.GeneratedMethodAccessor2984.invoke(Unknown Source)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at
org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
        ... 43 more


I can solve the problem by setting the submitted value of the checkbox
component-binding to null at the end of the delete action method, but I
think it looks like a hack. Setting the checkbox component-binding selected
state to false has no effect.


Can somebody explain the behavior, and maybe provide a cleaner solution?


Regards,
Matthias

Reply via email to