Olá, pessoal, estou com um problema com uma dataTable, pela qual, gostaria de submeter um valor selecionado ao banco, toda vez que selecionar, fechar a janela modal e submeter ao formulário.
O problema está ao salvar, onde nada acontece, meu problema está relacionado em como submeter o valor a partir de um selectOneRadio, pelo qual estou totalmente perdido.
Para tal criei um Wrapper, que deveria carregar o atributo específico vindo do bean, no mesmo setá-lo e submetê-lo
Tabela:
<?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>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta>
</h:head>
<h:body>
<f:view>
<h:form>
<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}"
id="table" var="_receptor" style="width: 100%;" rowKeyVar="ind"
noDataLabel="Não existem receptores cadastrados.">
<rich:column width="10%">
<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:column width="20%">
<f:facet name="header">
<h:outputText value="selecione" />
</f:facet>
<h:selectOneRadio id="myRadio#{Ind}"
value="#{atendimentoBean.atendimentoEdicao.receptor}">
<f:selectItem
value="#{atendimentoBean.atendimentoEdicao.receptor}"
itemValue="#{atendimentoBean.atendimentoEdicao.receptor}"
itemLabel="#{atendimentoBean.atendimentoEdicao.receptor}"></f:selectItem>
</h:selectOneRadio>
</rich:column>
</rich:dataTable>
</rich:popupPanel>
<br />
</h:form>
</f:view>
</h:body>
</html>
ManagedBean Atendimento:
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.model.SelectItem;
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 Receptor receptorSelecionado;
private List<Atendimento> atendimentos = new ArrayList<Atendimento>();
private List<SelectItem> tiposHemoderivados;
private List<SelectItem> tiposSanguineos;
private List<DoadoresWrapper> ListaDoadores;
private List<ReceptoresWrapper> ListaReceptores;
private List<Doador> doadoresSelecionados;
public String inicializar() {
this.atendimentoEdicao = new Atendimento();
this.tiposHemoderivados = null;
this.tiposSanguineos = null;
this.atendimentos = null;
this.ListaReceptores = null;
this.ListaDoadores = null;
return "incluirAtendimento2";
}
public void salvar(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
try {
if (this.receptorSelecionado != null) {
atendimentoEdicao.setReceptor(receptorSelecionado);
}
new AtendimentoService().salvar(this.atendimentoEdicao);
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 selecionar(Receptor receptor) {
this.receptorSelecionado = receptor;
}
public List<ReceptoresWrapper> getListaReceptores() {
if (this.ListaReceptores == null) {
List<Receptor> receptores = new ReceptorService().listarTodos();
this.ListaReceptores = new ArrayList<ReceptoresWrapper>();
if (receptores != null && receptores.isEmpty()) {
for (Receptor receptor : receptores) {
ReceptoresWrapper receptorWrapper = new ReceptoresWrapper();
receptorWrapper.setReceptor(receptor);
ListaReceptores.add(receptorWrapper);
}
}
}
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();
// if (doadorWrapper.isSelecionado()) {
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 Receptor getReceptorSelecionado() {
return receptorSelecionado;
}
public void setReceptorSelecionado(Receptor receptorSelecionado) {
this.receptorSelecionado = receptorSelecionado;
}
public List<Atendimento> getAtendimentos() {
return atendimentos;
}
public void setAtendimentos(List<Atendimento> atendimentos) {
this.atendimentos = atendimentos;
}
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) {
ListaDoadores = listaDoadores;
}
}
Não sei se é relevante, mas não custa, Wrapper receptor:
package br.com.agets.visao;
import br.com.agets.dominio.Receptor;
public class ReceptoresWrapper {
private Receptor receptor;
private Boolean selecionado;
public Receptor getReceptor() {
return receptor;
}
public void setReceptor(Receptor receptor) {
this.receptor = receptor;
}
public Boolean getSelecionado() {
return selecionado;
}
public void setSelecionado(Boolean selecionado) {
this.selecionado = selecionado;
}
}
Agradeço aos que puderem ajudar.