java.lang.NumberFormatException: For input string: "nomeDoCampo"

Olá amigos desenvolvedores!

Estou tem um problema na criação de uma dataTable dentro de um dialog!! A aplicação é assim: Tenho um cadastro de Grupos que funcionam perfeitamente e após cadastrados são exibidos em um dataTable, Com a existência dos Grupos tem-se a necessidade de criar SubGrupos associados aos Grupos, esta funcionalidade também está OK (inserção de subgrupos).

O problema é na hora da listagem destes subGrupos… no DataTable que lista os grupos criei um botão que deve abrir um <p:dialog> que por sua vez possui outro <p:DataTable> com os subGgrupos referente ao Grupo onde cliquei o botão. Fiz as funções para busca dos subGrupos e as requisições ajax, no entanto no momento de exibir o <p:dataTable> dentro do dialog ele vem vazio e na IDE me deparo com o erro "java.lang.NumberFormatException: For input string: "id"" para todos os campos que mapiei no <p:dataTable>.

Precisa muito de uma luz!!! Vou postar meus códigos aqui…

Página xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                xmlns:p="http://primefaces.org/ui" template="../main.xhtml">

    <ui:define name="content">
        <h:form id="fmGrupoCusto">
            <p:growl id="msgs" showDetail="true"/>
            <p:commandButton id="btnAdd" value="Novo" action="#{grupoCustoController.adicionar()}"
                             icon="fa fa-plus" class="btn btn-primary btn-sm" style="margin-bottom: 7px;"/>
            <p:dataTable id="actorsTable" var="grupo" value="#{grupoCustoController.listaGrupos}" 
                         selectionMode="single" rowKey="#{grupo.id}" paginator="true" rows="10"
                         paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                         rowsPerPageTemplate="10,20,30">
                <f:facet name="header">
                    <h3>Lista de Grupos do Centro de Custo</h3>
                </f:facet>
                <p:column headerText="Código" sortBy="#{grupo.id}" filterBy="#{grupo.id}" style="width: 68px;">
                    <h:outputText id="cod" value="#{grupo.id}"/>
                </p:column>
                <p:column headerText="Nome Grupo" sortBy="#{grupo.nomeGrupo}" filterBy="#{grupo.nomeGrupo}" style="width: 250px;">
                    <h:outputText id="nome" value="#{grupo.nomeGrupo}"/>
                </p:column>
                <p:column headerText="Ações" style="width: 140px; text-align: center;">
                    <div style="margin-bottom: 3px;">
                        <p:commandButton id="btnSubGrupo" icon="fa fa-plus" class="btn btn-default btn-sm"
                                         action="#{grupoCustoController.adicionarSubGrupo()}" value="Subgrupo">
                            <f:setPropertyActionListener value="#{grupo}" target="#{subGrupoCustoController.grupoCusto}"/>
                        </p:commandButton>
                    </div>
                    <div>
                        <p:commandButton update=":fmGrupoCusto:subGrupoList" 
                                         oncomplete="PF('subGrupoDialog').show()" 
                                         icon="fa fa-search" 
                                         class="btn btn-success btn-sm" 
                                         title="Visualizar">
                            <f:setPropertyActionListener value="#{grupo}" target="#{grupoCustoController.grupoSelecionado}" />
                            <p:ajax event="click" listener="#{grupoCustoController.getSubGrupoList(grupo.id)}" update=":fmGrupoCusto:subGrupoList"/>
                        </p:commandButton>
                        <p:commandButton id="btnEdit" 
                                         icon="fa fa-edit" 
                                         class="btn btn-info btn-sm" title="Alterar" 
                                         update=":fmGrupoCusto" 
                                         action="#{grupoCustoController.carregarGrupoCusto(grupo)}"/>
                        <p:commandButton id="btnExcluir" 
                                         icon="fa fa-trash" 
                                         class="btn btn-danger btn-sm" 
                                         title="Remover"
                                         update=":fmGrupoCusto"
                                         action="#{grupoCustoController.deletar(grupo)}">
                            <p:confirm header="Confirmação" message="Deseja realmente excluir este Grupo de Custo?" icon="fa fa-info-circle" />
                        </p:commandButton>
                    </div>
                </p:column>
            </p:dataTable>
            <!--Confirmação excluir-->
            <p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
                <div style="margin: auto; width: fit-content;">
                    <p:commandButton value="Sim" styleClass="ui-confirmdialog-yes" icon="fa fa-check" />
                    <p:commandButton value="Não" styleClass="ui-confirmdialog-no" icon="fa fa-close" />
                </div>
            </p:confirmDialog>

            <p:dialog header="Subgrupos Existentes" widgetVar="subGrupoDialog" modal="true" 
                      showEffect="fade" hideEffect="fade" resizable="false" draggable="false"
                      appendTo="@(body)">
                <p:outputPanel id="subGrupoList" style="text-align:left;">
                    <p:dataTable id="subgrupoTable" var="subGrupo" value="#{grupoCustoController.lista}" 
                                 selectionMode="single" rowKey="#{subGrupo.id}" paginator="true" rows="10"
                                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                 rowsPerPageTemplate="10,20,30">
                        <f:facet name="header">
                            <h3>Lista de SubGrupo relacionados ao Grupo</h3>
                        </f:facet>
                        <p:column headerText="Grupo Pai">
                            <h:outputText id="nomeGrupoPai" value="#{subGrupo.grupoPai.nomeGrupo}"/>
                        </p:column>
                        <p:column headerText="Nome">
                            <h:outputText id="nomesubGrupo" value="#{subGrupo.nomeSubGrupo}"/>
                        </p:column>
                    </p:dataTable>
                </p:outputPanel>
            </p:dialog>

        </h:form>
    </ui:define>
</ui:composition>

Método no Bean:

public List getSubGrupoList(Long id) {
lista = dao.getSubGrupos(id);
return lista;
}

Método na Camada DAO:

public List<SubGrupoCusto> getSubGrupos(Long id) {
        try {
            Criteria crit = HibernateUtil.getSessionFactory().openSession().createCriteria(SubGrupoCusto.class)
                    .createAlias("grupoPai", "grupo", JoinType.INNER_JOIN)
                    .add(Restrictions.eq("grupo.id", id))
                    .setProjection(Projections.projectionList()
                            .add(Property.forName("id"))
                            .add(Property.forName("nomeSubGrupo")));
            crit.addOrder(Order.asc("id"));
            return crit.list();
        } catch (Exception e) {
            System.out.println("catch - DAO.getSubGrupos -> " + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }

Desde já, agradeço a colaboração de vocês!

Boa tarde, eu tive o mesmo problema.
A solução foi a seguinte:

Meu dataTable era para single select mas apontava pra uma lista
<p:dataTable selection=“#{controller.listaSelecionada}” rowKey=“#{obj.id}”

Alterei para:
<p:dataTable selection=“#{controller.objSelecionado}” rowKey=“#{obj.id}”

E funcionou!

Quando voce passa o parametro na action voce passa o objeto grupo. ai ele invoca o metodo toString() para pegar o valor. So que o metodo que pesquisa os subgrupos, recebe um long. se o seu metodo toString nao estiver passando apenas o id, vai dar esse erro. Voce pode simplesmente alterar seus f:setPropertieAciontListetar colocar grupo.id. acredito que so isso ja resolve o problema.