2014-10-30 184 views
0

我有數據表與複選框選擇選項,我想跟蹤檢查,取消選中和切換選擇事件。我的代碼是:Primefaces dataTable rowSelectCheckbox,rowUnSelectbox和toggleSelect事件

<p:dataTable id="faDetail" value="#{assetSWOMB.faDetailList}" 
             lazy="true" rowIndexVar="rowsn" var="fad" rowKey="fad.id" 
             selection="#{assetSWOMB.selectedList}" scrollable="true" 
             scrollHeight="115"> 
             <p:ajax event="rowSelectCheckbox" ajax="true" 
              immediate="true" listener="#{assetSWOMB.onCheck()}" 
              update=":mainForm:countUser" process="@this" /> 
             <p:ajax event="rowUnselectCheckbox" ajax="true" 
              immediate="true" listener="#{assetSWOMB.onCheck()}" 
              update=":mainForm:countUser" process="@this" /> 

             <f:facet name="header"> 
           Asset Detail List 
           </f:facet> 
             <p:column style="width:16px;text-align:center" 
              selectionMode="multiple" /> 

             <p:column headerText="#"> 
              <h:outputText value="#{rowsn+1}" /> 
             </p:column> 
             <p:column headerText="Given Name"> 
              <h:outputText value="#{fad.assetGivenName}" /> 
             </p:column> 
             <p:column headerText="Brand Name"> 
              <h:outputText value="#{fad.brandDescription}" /> 
             </p:column> 
            </p:dataTable> 

功能在Managed Bean的是:

public void onCheck(){ 
     userCount = selectedList.size(); 
    } 

在選擇一個複選框(選中或取消),它總是會顯示以下錯誤:

com.sun.faces.context.PartialViewContextImpl processPartial 
INFO: javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled or you need to define rowKey attribute 
javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled or you need to define rowKey attribute 
    at org.primefaces.component.datatable.DataTable.getRowData(DataTable.java:950) 
    at org.primefaces.component.datatable.feature.SelectionFeature.decodeMultipleSelection(SelectionFeature.java:71) 
    at org.primefaces.component.datatable.feature.SelectionFeature.decode(SelectionFeature.java:40) 
    at org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:57) 
    at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787) 
    at org.primefaces.component.api.UIData.processDecodes(UIData.java:228) 
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506) 
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) 
    at org.primefaces.component.api.UIData.visitTree(UIData.java:639) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIForm.visitTree(UIForm.java:344) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376) 
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252) 
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183) 
    at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931) 
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.magnus.filter.LoginCheckFilter.doFilter(LoginCheckFilter.java:129) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 

但是我有定義了rowKey。 如何讓它工作?

回答

1

試一下rowKey="#{fad.id}"

+0

它很有效。謝謝。 – SudeepShakya 2014-10-31 05:42:50