Problema com checkbox na dataTable (JSF)

Pessoal, estou encontrando uma enorme dificuldade para fazer uma coisa simple que faria em 2 minutos utilizando um projeto com VRaptor por exemplo.
Faço uma consulta no banco e retorno a lista dos objetos encontrados pra minha tela e mostro em um rich:dataTable. Até aqui tranquilo.
O problema é que quero criar uma coluna que irá conter um checkbox para cada registro, e ao clicar em um botão, receber no meu método o campo “ID” dos registros selecionados. Não consigo fazer isso de jeito nenhum. Segue o trecho do jsp…

<h:form id="form_conteudo_pesquisa">

<!-- Panel onde irá listar a table com os dados retornados pela pesquisa -->
<rich:panel id="conteudo_pesquisa" style="display:#{not empty osBean.servicos ? 'block' : 'none'}">
<h:commandButton value="Gerar Relatório" actionListener="#{osBean.geraRelatorio}"/>
<rich:dataTable value="#{osBean.servicos}" var="item" id="servicos"  onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
                    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" sortMode="single" stateVar="#{item}">
    <rich:column>
                    <f:facet name="header">
                      <h:panelGroup layout="block">
                        <h:selectBooleanCheckbox id="checkAll" onclick="checkAllCheckboxesInTable( this.id, this.checked );">
                          <a4j:support event="onchange" reRender="IdList"/>
                        </h:selectBooleanCheckbox>
                        <h:outputText value="Imprimir"/>
                      </h:panelGroup>
                    </f:facet>
                    <h:selectBooleanCheckbox id="select" value="#{item.select}"></h:selectBooleanCheckbox>
    </rich:column>   
	<rich:column sortBy="#{item.id}">
			<f:facet name="header"><h:outputText value="Nº OS"/></f:facet>
			<a4j:commandLink reRender="panel_os" ajaxSingle="true" value="#{item.id}" actionListener="#{osBean.visualizaOS}" oncomplete="Richfaces.showModalPanel('panel_os')" >
				<f:param value="#{item.id}" name="codOS" />
			</a4j:commandLink>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputText value="Data"/></f:facet>
		<h:outputText value="#{item.data}"><f:convertDateTime pattern="dd/MM/yyyy"/></h:outputText>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputText value="Solicitante"/></f:facet>
		<h:outputText value="#{item.solicitante}"/>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputText value="Descrição"/></f:facet>
		<h:outputText value="#{item.descricao}"/>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputText value="Tipo"/></f:facet>
		<h:outputText value="#{item.tipoServico.descricao}"/>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputText value="Contrato"/></f:facet>
		<h:outputText value="#{item.contrato.id}"/>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputLabel value="Nota Fiscal"/></f:facet>
		<h:outputText value="#{empty item.numNota ? 'não emitida' : item.numNota}"/>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputText value="Valor"/></f:facet>
		<h:outputText value="#{empty item.numNota ? '-' : item.valorServico+item.valorMaterial}"><f:convertNumber pattern="#0.00"/></h:outputText>
		<f:facet name="footer">
			<h:outputText value="#{osBean.totalValor}"><f:convertNumber pattern="#0.00" /></h:outputText>
		</f:facet>
	</rich:column>
	<rich:column>
		<f:facet name="header"><h:outputText value="Total horas"/></f:facet>
		<h:outputText value="#{item.tempoTotalCobranca}"><f:convertNumber pattern="#0.00"/></h:outputText>
		<f:facet name="footer">
			<h:outputText value="#{osBean.totalHoras}"><f:convertNumber pattern="#0.00" /></h:outputText>
		</f:facet>
	</rich:column>
</rich:dataTable>

</rich:panel>
</h:form>

Se algúem conseguir me ajudar eu agradeço, pois empaquei aqui…

Olá,

Você vai ter que percorrer a lista de sua tabela, mas primeiro você terá que criar um atributo boolean em sua classe que representará o checkBox.

Exemplo

Relatorio relatorio = new Relatorio(); DataModel dm = listaRelatorios; int qtdLinhas = dm.getRowCount(); for (int i = 0; i < qtdLinhas; i++) { dm.setRowIndex(i); relatorio = (Relatorio) dm.getRowData(); System.out.println(relatorio.isCheckBoxSelecionado());//Exemplo }

Abs

Estou utilizando hibernate e já coloquei um boolean na minha classe:

<h:selectBooleanCheckbox id="select" value="#{item.select}"></h:selectBooleanCheckbox> 

O “select” seria o meu atributo boolean. O que constatei é que nada da minha rich:dataTable está indo para a action quando clico no botão. Coloquei um input fora da table para fazer um teste e o que eu escrevi foi para a action