Form é processado em um button mas não em outro

Boa tarde,

Estou com esse .xhtml de cadastro e o button de id=“botaoSalvar” processa o form de maneira correta, mas o button de id=“addEquip” já não processa, alguém poderia me explicar o porque?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">

    <ui:composition id="composicao" template="/template.xhtml">
        <!--   <ui:define name="title">
              <h:outputText value="#{bundle.CreateParciaisEdesImobAreasTitle}"> </h:outputText>
          </ui:define> -->
        <ui:define name="body">


            <f:view>
                <f:metadata>
                    <f:viewParam name="codigo" value="#{parciaisEdesImobAreasController.selected}" />
                </f:metadata>

                <h:outputScript name="js/locale-primefaces.js"/>
                <h:outputScript name="js/jquery.maskMoney.js"/>

                <script  type="text/javascript">
                    $(document).ready(format);
                    function format() {

                        jQuery('input[id*=odex]').unmaskMoney();
                        jQuery('input[id*=odex]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: "", thousands: "", showSymbol: false});
                        
                        jQuery('input[id*=odd]').unmaskMoney();
                        jQuery('input[id*=odd]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: "", thousands: "", showSymbol: false});
                        
                        jQuery('input[id*=projeto]').unmaskMoney();
                        jQuery('input[id*=projeto]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: "", thousands: "", showSymbol: false});
                        
                        jQuery('input[id*=valor]').unmaskMoney();
                        jQuery('input[id*=valor]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: ",", thousands: ".", showSymbol: true, precision: 2 });
                        

                    }
                </script>


                <h:form id="form">
                    <p:panel id="panelData" styleClass="centralizado"  header="#{bundle.CreateParciaisEdesImobAreasTitle}"  style="margin-top: 10px; width: 1024px;">
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela33,colunaTabela33,colunaTabela33" columns="3">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_odex}" for="odex" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_odd}" for="odd" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_projeto}" for="projeto" />
                        
                            <p:inputText id="odex"   maxlength="255"   value="#{parciaisEdesImobAreasController.selected.odex}" title="#{bundle.CreateParciaisEdesImobAreasTitle_odex}"/>
                            <p:inputText id="odd"   maxlength="255"   value="#{parciaisEdesImobAreasController.selected.odd}" title="#{bundle.CreateParciaisEdesImobAreasTitle_odd}"/>
                            <p:inputText id="projeto"   maxlength="255"   value="#{parciaisEdesImobAreasController.selected.projeto}" title="#{bundle.CreateParciaisEdesImobAreasTitle_projeto}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_projeto}"/>
                        </h:panelGrid>
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela50,colunaTabela50" columns="2">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_responsavel}" for="responsavel" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_valor}" for="valor" />
                            
                            <p:inputText id="responsavel" maxlength="50" size="50" onblur="value=value.toUpperCase()" value="#{parciaisEdesImobAreasController.selected.responsavel}" title="#{bundle.CreateParciaisEdesImobAreasTitle_responsavel}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_responsavel}"/>
                            <p:inputText id="valor"    value="#{parciaisEdesImobAreasController.selected.valor}" title="#{bundle.CreateParciaisEdesImobAreasTitle_valor}" >
                                <f:convertNumber pattern="#,##0.00"/>
                            </p:inputText>
                        </h:panelGrid>
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela50,colunaTabela50" columns="2">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_tipoDoc}" for="tipoDoc" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_data}" for="data" />
                            
                            <p:inputText id="tipoDoc" maxlength="50" size="50" onblur="value=value.toUpperCase()" value="#{parciaisEdesImobAreasController.selected.tipoDoc}" title="#{bundle.CreateParciaisEdesImobAreasTitle_tipoDoc}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_tipoDoc}"/>
                            <p:calendar locale="pt" pattern="dd/MM/yyyy" id="data" value="#{parciaisEdesImobAreasController.selected.data}" title="#{bundle.CreateParciaisEdesImobAreasTitle_data}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_data}"/>
                        </h:panelGrid>
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela50,colunaTabela50" columns="2">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_cr}" for="cr" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_numDoc}" for="numDoc" />
                            
                            <p:autoComplete id="cr"  forceSelection="true" value="#{parciaisEdesImobAreasController.selected.cr}"
                                            maxResults="8" size="30" dropdown="true" required="true" requiredMessage="Preencha o campo CR"
                                        var="cr" itemLabel="#{cr.cr}#{cr.idArea.area}#{cr.idDepartamento.departamento}"  itemValue="#{cr}" 
                                        completeMethod="#{crController.completeCreate}" converter="crConverter"/>
                            <p:inputMask mask="9999/9999" id="numDoc" maxlength="20" value="#{parciaisEdesImobAreasController.selected.numDoc}" title="#{bundle.CreateParciaisEdesImobAreasTitle_numDoc}" />
                        </h:panelGrid>
                        
                        <br/>
                        <p:commandButton id="addEquip" value="Adicionar" action="#{parciaisEdesImobAreasController.addItemInList}" update="dataTable" immediate="true" ajax="false"/>
                        &nbsp;
                        &nbsp;
                        <p:commandButton id="rmvEquip" value="Remover" action="#{parciaisEdesImobAreasController.rmvItemList}" update="dataTable" immediate="true" process="rmvEquip, form:panelData"/>
                        <br/>
                        <br/>
                        <p:dataTable id="dataTable" var="item" emptyMessage="Sem documentos inseridos." selectionMode="single" value="#{parciaisEdesImobAreasController.dataModel}" selection="#{parciaisEdesImobAreasController.current}" rowKey="#{item.codigo}" rows="10">
                            <f:facet name="header">
                                Lista de Documentos
                            </f:facet>
                            
                            <p:ajax event="rowSelect"/>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_odex}" >
                                #{item.odex}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_odd}" >
                                #{item.odd}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_projeto}" >
                                #{item.projeto}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_responsavel}" >
                                #{item.responsavel}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_valor}" >
                                R$ #{item.valor}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_tipoDoc}" >
                                #{item.tipoDoc}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_data}" >
                                #{item.data}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_cr}" >
                                #{item.cr.cr} - #{item.cr.idArea.area}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_numDoc}" >
                                #{item.numDoc}
                            </p:column>
                            
                        </p:dataTable>
                
                        
                    </p:panel>
                    
                    <p:panel styleClass="centralizado" header="#{bundle.acoes}" style="margin-top: 10px; width: 1024px;">
                        <h:panelGrid style="text-align: center" columnClasses="colunaTabela33, colunaTabela33, colunaTabela33" columns="3" width="100%">    
                            <p:commandButton id="botaoSalvar" icon="ui-icon-disk" action="#{parciaisEdesImobAreasController.create}" value="#{bundle.CreateParciaisEdesImobAreasSaveLink}" ajax="false" />
                            <p:commandButton id="botaoConsultar" icon="ui-icon-search" action="#{parciaisEdesImobAreasController.prepareList}" value="#{bundle.CreateParciaisEdesImobAreasShowAllLink}" ajax="false" immediate="true"/>
                            <p:commandButton id="botaoNovo" icon="ui-icon-document"  value="#{bundle.novo}" action="#{parciaisEdesImobAreasController.prepareCreate}" ajax="false" immediate="true"/>
                        </h:panelGrid>
                    </p:panel>            
                </h:form>

            </f:view>
        </ui:define>
    </ui:composition>

</html>

O que seria não processar de maneira correta?
Pra que o Immediate?

1 curtida

Eu havia copiado de um exemplo, minutos depois retirei o immediate e funcionou a parte do required, mas agora os valores dos items não está sendo passado.

Itens do autoComplete? Os itens não são listados ou o item nao esta indo para o backing bean?

Você não precisa usar JQuery para fazer a mascara monetaria, o próprio PrimeFaces tem um componente para isso, que é o inputNumber

1 curtida

Não, todos os itens, no meu caso o value do odex, odd, projeto etc

Ve se o método esta sendo chamado, põem um System.out.println la

1 curtida

<p:commandButton id="addEquip" value="Adicionar" action="#{parciaisEdesImobAreasController.addItemInList}" update="dataTable" immediate="true" ajax="false"/>

Por eu não especificar o que é pra ser processado, existe a possibilidade de estar sendo processado algum outro botão?

Porque pelo que eu verifiquei no meu controller o selected está sendo chamado mais do que deveria.

Com certeza, quando existe dois botoes ou mais, acontece isso, não precisa nem ser botoes, com p:ajax ja é possivel encontrar esse mesmo problema.

Processa os campos separados por “espaço” process="@this campo1 campo" ou se os botoes estiverem fora do panelgrid dos campos, processa o panel

1 curtida

Você sabe alguma maneira de verificar o que está sendo passando do meu navegador através do form para que eu verifique quais estão sendo passados?

Eu normalmente coloco um System.out.prinln() em cada método e ai descubro qual esta sendo chamado.

1 curtida

Não sei se vai funcionar nesse caso,

Eu verifiquei o seguinte, o valor dos input está sendo passado, só que algum outro componente está fazendo requisição também e tentando passar novamente os valores que já estão null e acaba não recebendo nada no método que deveria.

colocou o process nos botoes?

1 curtida

Sim, mas ainda está retornando null.

Coloquei também os println e apenas o método do botão que eu clico está sendo chamado.

Posta o código atualizado e a stacktrace

1 curtida

Apesar de não ser da forma que eu queria, eu consegui adicionar os valores a lista no método do botão adicionar.

Porém o dataModel agora está retornando o erro abaixo, eu acho que devido a não estar setando o adicionar como ajax.

Grave:   Error Rendering View[/pagina/parciaisEdesImobAreas/Create.xhtml]
javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
	at org.primefaces.component.datatable.DataTable.getRowKeyFromModel(DataTable.java:1259)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:961)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRows(DataTableRenderer.java:907)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:854)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:814)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:290)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:252)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:87)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:949)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:89)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)
	at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:206)
	at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:123)
	at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:58)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:949)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1912)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:918)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1905)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:491)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:194)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:126)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:223)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1580)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:338)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:250)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:652)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:591)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
	at java.lang.Thread.run(Thread.java:748)







Informações:   Exception when handling error trying to reset the response.
javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
	at org.primefaces.component.datatable.DataTable.getRowKeyFromModel(DataTable.java:1259)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:961)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRows(DataTableRenderer.java:907)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:854)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:814)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:290)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:252)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:87)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:949)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:89)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)
	at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:206)
	at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:123)
	at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:58)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:949)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1912)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:918)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1905)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:491)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:194)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:126)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:223)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1580)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:338)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:250)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:652)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:591)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
	at java.lang.Thread.run(Thread.java:748)

Advertência:   StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.FacesException: DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
	at org.primefaces.component.datatable.DataTable.getRowKeyFromModel(DataTable.java:1259)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:961)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRows(DataTableRenderer.java:907)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:854)
	at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:814)
	at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:290)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:252)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:87)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:949)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:89)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)
	at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:206)
	at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:123)
	at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:58)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:949)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1912)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:918)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1905)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:491)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:194)
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:126)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:223)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1580)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:338)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:250)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:652)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:591)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
	at java.lang.Thread.run(Thread.java:748)

O código da página está da seguinte forma:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">

    <ui:composition id="composicao" template="/template.xhtml">
        <!--   <ui:define name="title">
              <h:outputText value="#{bundle.CreateParciaisEdesImobAreasTitle}"> </h:outputText>
          </ui:define> -->
        <ui:define name="body">


            <f:view>
                <f:metadata>
                    <f:viewParam name="codigo" value="#{parciaisEdesImobAreasController.selected}" />
                </f:metadata>

                <h:outputScript name="js/locale-primefaces.js"/>
                <h:outputScript name="js/jquery.maskMoney.js"/>

                <script  type="text/javascript">
                    $(document).ready(format);
                    function format() {

                        jQuery('input[id*=odex]').unmaskMoney();
                        jQuery('input[id*=odex]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: "", thousands: "", showSymbol: false});
                        
                        jQuery('input[id*=odd]').unmaskMoney();
                        jQuery('input[id*=odd]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: "", thousands: "", showSymbol: false});
                        
                        jQuery('input[id*=projeto]').unmaskMoney();
                        jQuery('input[id*=projeto]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: "", thousands: "", showSymbol: false});
                        
                        jQuery('input[id*=valor]').unmaskMoney();
                        jQuery('input[id*=valor]').maskMoney({symbolStay: false, symbol: "R$ ", decimal: ",", thousands: ".", showSymbol: true, precision: 2 });
                        

                    }
                </script>


                <h:form id="form">
                    <p:panel id="panelData" styleClass="centralizado"  header="#{bundle.CreateParciaisEdesImobAreasTitle}"  style="margin-top: 10px; width: 1024px;">
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela33,colunaTabela33,colunaTabela33" columns="3">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_odex}" for="odex" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_odd}" for="odd" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_projeto}" for="projeto" />
                        
                            <p:inputText id="odex"   maxlength="255"   value="#{parciaisEdesImobAreasController.odex}" title="#{bundle.CreateParciaisEdesImobAreasTitle_odex}"/>
                            <p:inputText id="odd"   maxlength="255"   value="#{parciaisEdesImobAreasController.odd}" title="#{bundle.CreateParciaisEdesImobAreasTitle_odd}"/>
                            <p:inputText id="projeto"   maxlength="255"   value="#{parciaisEdesImobAreasController.projeto}" title="#{bundle.CreateParciaisEdesImobAreasTitle_projeto}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_projeto}"/>
                        </h:panelGrid>
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela50,colunaTabela50" columns="2">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_responsavel}" for="responsavel" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_valor}" for="valor" />
                            
                            <p:inputText id="responsavel" maxlength="50" size="50" onblur="value=value.toUpperCase()" value="#{parciaisEdesImobAreasController.responsavel}" title="#{bundle.CreateParciaisEdesImobAreasTitle_responsavel}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_responsavel}"/>
                            <p:inputText id="valor"    value="#{parciaisEdesImobAreasController.valor}" title="#{bundle.CreateParciaisEdesImobAreasTitle_valor}" >
                                <f:convertNumber pattern="#,##0.00"/>
                            </p:inputText>
                        </h:panelGrid>
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela50,colunaTabela50" columns="2">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_tipoDoc}" for="tipoDoc" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_data}" for="data" />
                            
                            <p:inputText id="tipoDoc" maxlength="50" size="50" onblur="value=value.toUpperCase()" value="#{parciaisEdesImobAreasController.tipoDoc}" title="#{bundle.CreateParciaisEdesImobAreasTitle_tipoDoc}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_tipoDoc}"/>
                            <p:calendar locale="pt" pattern="dd/MM/yyyy" id="data" value="#{parciaisEdesImobAreasController.data}" title="#{bundle.CreateParciaisEdesImobAreasTitle_data}" required="true" requiredMessage="Preencha o campo #{bundle.CreateParciaisEdesImobAreasTitle_data}"/>
                        </h:panelGrid>
                        
                        <h:panelGrid width="100%" columnClasses="colunaTabela50,colunaTabela50" columns="2">
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_cr}" for="cr" />
                            <h:outputLabel value="#{bundle.CreateParciaisEdesImobAreasLabel_numDoc}" for="numDoc" />
                            
                            <p:autoComplete id="cr"  forceSelection="true" value="#{parciaisEdesImobAreasController.cr}"
                                            maxResults="8" size="30" dropdown="true" required="true" requiredMessage="Preencha o campo CR"
                                        var="cr" itemLabel="#{cr.cr}#{cr.idArea.area}#{cr.idDepartamento.departamento}"  itemValue="#{cr}" 
                                        completeMethod="#{crController.completeCreate}" converter="crConverter"/>
                            <p:inputMask mask="9999/9999" id="numDoc" maxlength="20" value="#{parciaisEdesImobAreasController.numDoc}" title="#{bundle.CreateParciaisEdesImobAreasTitle_numDoc}" />
                        </h:panelGrid>
                        
                        <br/>
                        <p:commandButton id="addEquip" value="Adicionar" action="#{parciaisEdesImobAreasController.addItemInList}" update="dataTable" ajax="false" process="@this, form:odex, form:odd, form:projeto, form:responsavel, form:valor, form:tipoDoc, form:data, form:cr, form:numDoc"/>
                        &nbsp;
                        &nbsp;
                        <p:commandButton id="rmvEquip" value="Remover" action="#{parciaisEdesImobAreasController.rmvItemList}" update="dataTable"  ajax="false" process="@this"/>
                        <br/>
                        <br/>
                        <p:dataTable id="dataTable" var="item" emptyMessage="Sem documentos inseridos." selectionMode="single" value="#{parciaisEdesImobAreasController.dataModel}" selection="#{parciaisEdesImobAreasController.selected}" rowKey="#{item.codigo}" rows="10">
                            <f:facet name="header">
                                Lista de Documentos
                            </f:facet>
                            
                            <p:ajax process="@this" event="rowSelect"/>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_odex}" >
                                #{item.odex}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_odd}" >
                                #{item.odd}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_projeto}" >
                                #{item.projeto}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_responsavel}" >
                                #{item.responsavel}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_valor}" >
                                R$ #{item.valor}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_tipoDoc}" >
                                #{item.tipoDoc}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_data}" >
                                #{item.data}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_cr}" >
                                #{item.cr.cr} - #{item.cr.idArea.area}
                            </p:column>
                            
                            <p:column headerText="#{bundle.CreateParciaisEdesImobAreasTitle_numDoc}" >
                                #{item.numDoc}
                            </p:column>
                            
                        </p:dataTable>
                
                        
                    </p:panel>
                    
                    <p:panel styleClass="centralizado" header="#{bundle.acoes}" style="margin-top: 10px; width: 1024px;">
                        <h:panelGrid style="text-align: center" columnClasses="colunaTabela33, colunaTabela33, colunaTabela33" columns="3" width="100%">    
                            <p:commandButton id="botaoSalvar" icon="ui-icon-disk" action="#{parciaisEdesImobAreasController.create}" value="#{bundle.CreateParciaisEdesImobAreasSaveLink}" ajax="false" process="@this"/>
                            <p:commandButton id="botaoConsultar" icon="ui-icon-search" action="#{parciaisEdesImobAreasController.prepareList}" value="#{bundle.CreateParciaisEdesImobAreasShowAllLink}" ajax="false" immediate="true" process="@this"/>
                            <p:commandButton id="botaoNovo" icon="ui-icon-document"  value="#{bundle.novo}" action="#{parciaisEdesImobAreasController.prepareCreate}" ajax="false" immediate="true" process="@this"/>
                        </h:panelGrid>
                    </p:panel>            
                </h:form>

            </f:view>
        </ui:define>
    </ui:composition>

</html>

O erro era devido ao rowKey estar setando uma variável null, já resolvi.

Outra dúvida, sou obrigado a declarar mesmo um rowkey?

Esse erro da quando a gente tenta usar o modo de seleção.
Se for uma tabela que mostra os dados da Classe XYZ, você tem que ter um atributo dessa classe no seu Bean e colocar o atributo rowKey na dataTable (voce ja colocou)

private XYZ xyz;

1 curtida

É sim, é através do rowKey que a dataTable diferencia uma linha da outra/um objeto do outro.

Certo, é possível utilizar de maneira composta como no banco de dados? Pois nenhum dado é exclusivo, todos podem se repetir durante a inserção.