RunTimeException in rich:datatable
proxima84 May 26, 2007 6:03 AMHello, I am sorry for my English.
I am using Trinidad, MyFaces, RichFases and Ajax4Jsf.
My problem: if I quickly click on table row, take place
RunTimeException.
my page:
<?xml version='1.0' encoding='windows-1251'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:tr="http://myfaces.apache.org/trinidad" xmlns:rich="http://richfaces.ajax4jsf.org/rich"> <f:loadBundle basename="ru.csbi.webapp.resources.UIResources" var="res" /> <jsp:directive.page contentType="text/html;charset=windows-1251" /> <f:view> <tr:document> <h:form id="form1"> <rich:dataTable id="data_list" binding="#{employee.datatable}"> </rich:dataTable> </h:form> </tr:document> </f:view> </jsp:root>
myBean:
import java.util.ArrayList; import java.util.List; import javax.faces.event.AbortProcessingException; import javax.faces.event.ActionEvent; import javax.faces.event.ActionListener; import org.ajax4jsf.ajax.html.HtmlAjaxSupport; import org.apache.myfaces.trinidad.component.core.output.CoreOutputText; import org.richfaces.component.html.HtmlColumn; import org.richfaces.component.html.HtmlDataTable; public class Employee { public class SelectRow implements ActionListener { public SelectRow() { } public void processAction(ActionEvent actionEvent) throws AbortProcessingException { for (int i = 0; i < 10000; i++) { System.out.println(i); } } } public Employee() { System.out.println("constructor"); myDataList = new ArrayList<String>(); myDataList.add("1"); myDataList.add("1"); myDataList.add("1"); datatable = new HtmlDataTable(); datatable.setVar("p"); datatable.setValue(myDataList); HtmlAjaxSupport as = new HtmlAjaxSupport(); as.setEvent("onRowClick"); as .setOnsubmit("for(var n=0; n<this.parentElement.children.length;n++){this.parentElement.children[n].style.backgroundColor='#B5CCD9';}this.style.backgroundColor='#F1F1F1';"); as.addActionListener(new SelectRow()); datatable.getFacets().put("first", as); HtmlColumn col1 = new HtmlColumn(); CoreOutputText head1 = new CoreOutputText(); head1.setValue("item1"); col1.setHeader(head1); CoreOutputText text1 = new CoreOutputText(); text1.setValue("text1"); col1.getChildren().add(text1); HtmlColumn col2 = new HtmlColumn(); CoreOutputText head2 = new CoreOutputText(); head2.setValue("item2"); col2.setHeader(head2); CoreOutputText text2 = new CoreOutputText(); text2.setValue("text2"); col2.getChildren().add(text2); datatable.getChildren().add(col1); datatable.getChildren().add(col2); } public List<String> myDataList; public List<String> getMyDataList() { return myDataList; } public HtmlDataTable datatable; public HtmlDataTable getDatatable() { return datatable; } public void setDatatable(HtmlDataTable datatable) { this.datatable = datatable; } }
and Exception
java.lang.RuntimeException: Could not restore StateHolder of type Employee$SelectRow (missing no-args constructor?) at javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:894) at javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:880) at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:950) at javax.faces.component.UICommand.restoreState(UICommand.java:189) at org.ajax4jsf.ajax.html.HtmlAjaxSupport.restoreState(HtmlAjaxSupport.java:637) at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:728) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at org.apache.myfaces.trinidad.component.TreeState.restoreState(TreeState.java:100) at org.apache.myfaces.trinidad.component.UIXComponentBase.processRestoreState(UIXComponentBase.java:833) at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:719) at org.apache.myfaces.trinidadinternal.application.StateManagerImpl.restoreView(StateManagerImpl.java:455) at org.ajax4jsf.framework.ajax.AjaxStateManager.restoreView(AjaxStateManager.java:83) at org.apache.myfaces.application.jsp.JspViewHandlerImpl.restoreView(JspViewHandlerImpl.java:255) at org.ajax4jsf.framework.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:116) at org.ajax4jsf.framework.ajax.AjaxViewHandler.restoreView(AjaxViewHandler.java:147) at org.apache.myfaces.trinidadinternal.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:266) at org.ajax4jsf.framework.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:116) at org.ajax4jsf.framework.ajax.AjaxViewHandler.restoreView(AjaxViewHandler.java:147) at org.apache.myfaces.lifecycle.LifecycleImpl.restoreView(LifecycleImpl.java:141) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:66) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._invokeDoFilter(TrinidadFilterImpl.java:210) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:167) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:140) at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:93) at ru.csbi.webapp.filters.TrinidadExt.doFilter(TrinidadExt.java:18) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96) at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) ... 64 more
Can somebody help me? What wrong?