Problema com selectOneRadio em dataTable

Olá caros, estou tendo um problema, gostaria de contar com a ajuda dos prezados, se for possível:
Tenho um relacionamento com 3 entidades, sendo elas receptor, atendimento e doador - onde para um atendimento preciso de um receptor e vários doadores.
Para submeter os doadores ao atendimento não tive problemas, eu consegui.
Mas o meu problema está na parte de receptor.

Onde em uma dataTable, o usuário deve submeter um receptor através de um radioButonn, o que não tenho problema, exceto pelo fato de que é possível selecionar mais de um.
Como resolver?
Podem ajudar?
Este é meu ManagedBean:


package br.com.agets.visao;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import org.richfaces.component.UIDataTable;

import br.com.agets.dominio.Atendimento;
import br.com.agets.dominio.Doador;
import br.com.agets.dominio.Receptor;
import br.com.agets.dominio.TipoHemoderivado;
import br.com.agets.dominio.TipoSanguineo;
import br.com.agets.negocio.AtendimentoService;
import br.com.agets.negocio.DoadorService;
import br.com.agets.negocio.ReceptorService;
import br.com.agets.negocio.RegraNegocioException;

@ManagedBean(name = "atendimentoBean")
@SessionScoped
public class AtendimentoBean {

	private Atendimento atendimentoEdicao;

	private UIDataTable uiDataTable;
	private List<Atendimento> atendimentos = new ArrayList<Atendimento>();
	private List<SelectItem> tiposHemoderivados;
	private List<SelectItem> tiposSanguineos;

	private Receptor receptorSelecionado;

	private List<Receptor> listaReceptores;

	private List<DoadoresWrapper> listaDoadores;

	private List<Doador> doadoresSelecionados;

	public String inicializar() {
		this.atendimentoEdicao = new Atendimento();
		this.tiposHemoderivados = null;
		this.tiposSanguineos = null;
		this.atendimentos = null;
		this.listaDoadores = null;
		this.listaReceptores = null;
		return "incluirAtendimento";
	}

	public void salvar(ActionEvent event) {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			List<Doador> doadores = new ArrayList<Doador>();
			for (DoadoresWrapper doadoresWrapper : listaDoadores) {
				if (doadoresWrapper.isSelecionado()) {
					doadores.add(doadoresWrapper.getDoador());
				}
				List<Receptor> receptores = new ArrayList<Receptor>();
				for (Receptor receptorSelecionado : receptores) {
					receptores.add(receptorSelecionado);
				}

			}
			atendimentoEdicao.setReceptor(receptorSelecionado);
			atendimentoEdicao.setDoadores(doadores);
			new AtendimentoService().salvar(this.atendimentoEdicao);
			atendimentoEdicao.setDoadores(doadores);
			FacesMessage msg = new FacesMessage("Atendimento Cadastrado com sucesso!");
			msg.setSeverity(FacesMessage.SEVERITY_INFO);
			context.addMessage(null, msg);
			inicializar();
		} catch (RegraNegocioException e) {
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
		} catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage("Erro inesperado ao cadastrar atendimento! " + e.getMessage());
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, msg);
		}
	}

	public List<String> sugerirNomeReceptor(Object event) {
		return new ReceptorService().pesquisarReceptores(event.toString());

	}

	public void excluir() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			new AtendimentoService().excluir(this.atendimentoEdicao);
			this.atendimentos.remove(this.atendimentoEdicao);
			FacesMessage msg = new FacesMessage("Atendimento excluído com sucesso!");
			msg.setSeverity(FacesMessage.SEVERITY_INFO);
			context.addMessage(null, msg);
		} catch (RegraNegocioException e) {
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
		} catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage("Erro inesperado ao excluir atendimento!");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, msg);
		}
	}

	public void setReceptorSelecionado(ValueChangeEvent event) {
		receptorSelecionado = (Receptor) uiDataTable.getRowData();
		System.out.println(receptorSelecionado);
		listaReceptores = new ArrayList<Receptor>();
		listaReceptores.add(receptorSelecionado);
	}

	public List<Receptor> getListaReceptores() {
		if (this.listaReceptores == null) {
			this.listaReceptores = new ReceptorService().listarTodos();
		}
		return this.listaReceptores;
	}

	public List<DoadoresWrapper> getListaDoadores() {
		if (this.listaDoadores == null) {
			List<Doador> doadores = new DoadorService().listarTodos();
			this.listaDoadores = new ArrayList<DoadoresWrapper>();
			if (doadores != null && !doadores.isEmpty()) {
				for (Doador doador : doadores) {
					DoadoresWrapper doadorWrapper = new DoadoresWrapper();
					doadorWrapper.setDoador(doador);
					listaDoadores.add(doadorWrapper);
				}
			}
		}
		return this.listaDoadores;

	}

	public List<SelectItem> getTiposHemoderivados() {
		if (this.tiposHemoderivados == null) {
			this.tiposHemoderivados = new ArrayList<SelectItem>();
			this.tiposHemoderivados.add(new SelectItem(null, "Selecione"));
			for (TipoHemoderivado tipos : TipoHemoderivado.values()) {
				this.tiposHemoderivados.add(new SelectItem(tipos.toString()));
			}
		}
		return tiposHemoderivados;
	}

	public List<SelectItem> getTiposSanguineos() {
		if (this.tiposSanguineos == null) {
			this.tiposSanguineos = new ArrayList<SelectItem>();
			this.tiposSanguineos.add(new SelectItem(null, "Selecione"));
			for (TipoSanguineo tipos : TipoSanguineo.values()) {
				this.tiposSanguineos.add(new SelectItem(tipos.toString()));
			}
		}
		return tiposSanguineos;
	}

	public Atendimento getAtendimentoEdicao() {
		return atendimentoEdicao;
	}

	public void setAtendimentoEdicao(Atendimento atendimentoEdicao) {
		this.atendimentoEdicao = atendimentoEdicao;
	}

	public List<Atendimento> getAtendimentos() {
		return atendimentos;
	}

	public void setAtendimentos(List<Atendimento> atendimentos) {
		this.atendimentos = atendimentos;
	}

	public UIDataTable getUiDataTable() {
		return uiDataTable;
	}

	public void setUiDataTable(UIDataTable uiDataTable) {
		this.uiDataTable = uiDataTable;
	}

	public List<Doador> getDoadoresSelecionados() {
		return doadoresSelecionados;
	}

	public void setDoadoresSelecionados(List<Doador> doadoresSelecionados) {
		this.doadoresSelecionados = doadoresSelecionados;
	}

	public void setTiposHemoderivados(List<SelectItem> tiposHemoderivados) {
		this.tiposHemoderivados = tiposHemoderivados;
	}

	public void setTiposSanguineos(List<SelectItem> tiposSanguineos) {
		this.tiposSanguineos = tiposSanguineos;
	}

	public void setListaDoadores(List<DoadoresWrapper> listaDoadores) {
		this.listaDoadores = listaDoadores;
	}

	public void setListaReceptores(List<Receptor> listaReceptores) {
		this.listaReceptores = listaReceptores;
	}

	public Receptor getReceptorSelecionado() {
		return receptorSelecionado;
	}

}

Este é a tabela pela qual obtenho os dados, e o radio que buscaria o valor que necessito:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!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:f="http://java.sun.com/jsf/core"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich">

<ui:composition>
	<f:view>
		<rich:popupPanel id="modalPanelReceptor" modal="false" width="600"
			moveable="false">
			<f:facet name="header">
				<h:outputText value="Defina o Receptor"></h:outputText>
			</f:facet>

			<f:facet name="controls">
				<h:outputLink value="#" style="text-decoration:none;"
					onclick="#{rich:component('modalPanelReceptor')}.hide(); return false;">X</h:outputLink>
			</f:facet>

			<rich:dataTable value="#{atendimentoBean.listaReceptores}"
				var="_receptor" style="width: 100%;"
				binding="#{atendimentoBean.uiDataTable}"
				noDataLabel="Não existem receptores cadastrados." rowKeyVar="index">

				<rich:column width="40%">
					<f:facet name="header">
						<h:outputText value="Selecione" />
					</f:facet>
					<h:selectOneRadio onclick="radioButton(this);"
						valueChangeListener="#{atendimentoBean.setReceptorSelecionado}"
						value="#{atendimentoBean.atendimentoEdicao.receptor}"
						converter="receptorConverter">
						<f:selectItem itemValue="#{_receptor}">
						</f:selectItem>
					</h:selectOneRadio>
				</rich:column>
				<rich:column width="40%">
					<f:facet name="header">
						<h:outputText value="Nome do receptor" />
					</f:facet>
					<h:outputText value="#{_receptor.nomeReceptor}"></h:outputText>
				</rich:column>

				<rich:column width="25%">
					<f:facet name="header">
						<h:outputText value="Tipo sanguíneo do receptor" />
					</f:facet>
					<h:outputText value="#{_receptor.tipoSanguineo}"></h:outputText>
				</rich:column>

				<rich:column width="25%">
					<f:facet name="header">
						<h:outputText value="Tipo Hemoderivado do receptor" />
					</f:facet>
					<h:outputText value="#{_receptor.tipoHemo}"></h:outputText>
				</rich:column>



			</rich:dataTable>
			<a4j:commandButton value="OK"
				onclick="#{rich:component('modalPanelReceptor')}.hide(); return
false;" />
		</rich:popupPanel>
		<br />
	&lt;/f:view&gt;
&lt;/ui:composition&gt;
&lt;/html&gt;

O único problema é que posso selecionar mais de um. Têm alguma idéia de como resolver?

O problema está persistente a algum tempo, sem solução.

Pensei em resolver com javascript, esta era minha idéia:
http://www.javabeat.net/2008/07/how-to-use-hselectoneradio-inside-hdatatable-in-jsf/

A página que está o modal:

[code]<?xml version=“1.0” encoding=“ISO-8859-1”?>
<!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:f=“http://java.sun.com/jsf/core
xmlns:a4j=“http://richfaces.org/a4j
xmlns:rich=“http://richfaces.org/rich”>

<h:head>
<h:outputScript name=“modal.js” library=“js” target=“head” />
<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1”></meta>
<title>Cadastro de atendimentos</title>
</h:head>
<h:body>
<f:view>
<h1>
<h:outputText value=“Cadastro de atendimentos”></h:outputText>
</h1>
<h:form>
<a4j:poll render=“mensagem” interval=“5000”></a4j:poll>
<h:messages layout=“table” showSummary=“true” showDetail=“false”
id=“mensagem” globalOnly=“true” styleClass=“msgErro”
infoClass=“msgInfo” style=“font-weight: bold” />

		&lt;h:panelGrid columns="2"&gt;

			&lt;h:outputLabel value="Código:"
				rendered="#{atendimentoBean.atendimentoEdicao.id!=null}" /&gt;
			&lt;h:panelGroup
				rendered="#{atendimentoBean.atendimentoEdicao.id!=null}"&gt;
				&lt;h:inputText required="true" id="codigo_ate"
					value="#{atendimentoBean.atendimentoEdicao}"
					label="Código do atendimento" disabled="true" /&gt;
				&lt;h:message for="codigo_ate" showSummary="true" showDetail="false" /&gt;
			&lt;/h:panelGroup&gt;

			&lt;h:outputLabel value="Data do atendimento" /&gt;
			&lt;h:panelGroup&gt;
				&lt;rich:calendar id="dataentrada" enableManualInput="true"
					value="#{atendimentoBean.atendimentoEdicao.dataAtendimento}"
					required="true" requiredMessage="Este valor é obrigatório"
					locale="pt_BR" datePattern="dd/MM/yyyy"&gt;
					&lt;h:message for="dataentrada" showSummary="true" showDetail="false"&gt;
					&lt;/h:message&gt;
				&lt;/rich:calendar&gt;
			&lt;/h:panelGroup&gt;

			&lt;h:outputLabel value="Número de ordem" /&gt;
			&lt;h:panelGroup&gt;
				&lt;h:inputText id="numordem"
					value="#{atendimentoBean.atendimentoEdicao.numeroOrdem}"
					required="true" size="40"
					requiredMessage="Este valor é obrigatório" /&gt;
				&lt;h:message for="numordem" showSummary="true" showDetail="false"
					styleClass="msgErro"&gt;
				&lt;/h:message&gt;
			&lt;/h:panelGroup&gt;

			&lt;h:outputLabel value="Teste de compatibilidade" /&gt;
			&lt;h:panelGroup&gt;
				&lt;h:selectOneRadio id="compatibilidade" required="true"
					requiredMessage="Este valor é obrigatório"
					value="#{atendimentoBean.atendimentoEdicao.testeCompatibilidade}"
					label="Teste de compatibilidade" layout="pageDirection"&gt;
					&lt;f:selectItem itemValue="true" itemLabel="Aprovado" /&gt;
					&lt;f:selectItem itemValue="false" itemLabel="Reprovado" /&gt;
				&lt;/h:selectOneRadio&gt;
				&lt;h:message for="compatibilidade" showSummary="true"
					showDetail="false" styleClass="msgErro"&gt;
				&lt;/h:message&gt;
			&lt;/h:panelGroup&gt;

			&lt;h:outputLabel value="Receptor" /&gt;
			&lt;h:panelGroup&gt;
				&lt;h:commandLink value="Definir Receptor"&gt;
					&lt;rich:componentControl target="modalPanelReceptor"
						operation="show" /&gt;
				&lt;/h:commandLink&gt;
				&lt;ui:include src="/components/modalPanelReceptor.xhtml" /&gt;
			&lt;/h:panelGroup&gt;

			&lt;h:outputLabel value="Doador" /&gt;
			&lt;h:panelGroup&gt;
				&lt;h:commandLink value="Definir Doador"&gt;
					&lt;rich:componentControl target="modalPanelDoador" operation="show" /&gt;
				&lt;/h:commandLink&gt;
				&lt;ui:include src="/components/modalPanelDoador.xhtml" /&gt;
			&lt;/h:panelGroup&gt;
		&lt;/h:panelGrid&gt;


		&lt;h:commandButton value="Salvar"
			actionListener="#{atendimentoBean.salvar}" /&gt;
		&lt;h:commandButton value="Voltar" immediate="true" action="menu" /&gt;
	&lt;/h:form&gt;
&lt;/f:view&gt;

</h:body>
</html>[/code]

e o .js que é referenciado, dentro de resources/js:

function selectOne(form, button) {
	turnOffRadioForForm(form);
	button.checked = true;
}

function turnOffRadioForForm(form) {
	for (i = 0; i &lt; form.elements.length; i++) {
		if (form.elements[i].type == 'radio') {
			form.elements[i].checked = false;
		}
	}
}