Ola alguem sabe fazer ou tem algum exemplo de como realizar estas seleções com JSF sem usar o TomaHank ou outra implementação
Obrigado.
Ola alguem sabe fazer ou tem algum exemplo de como realizar estas seleções com JSF sem usar o TomaHank ou outra implementação
Obrigado.
Resolvi a questão dos radio com esse post meu, mas ainda tenho um problema ; selecionar apenas um
http://www.guj.com.br/java/290173-problema-com-selectoneradio-em-datatable#1535364
, com a diferença que ao invés de usar UIdatatable será apenas HTMLDataTable para usar em JSF Puro.
agora, a questão de checkbox, a sugestão é usar um DTO, que ao carregar tuas listas, ele irá recebê-las, de modo que ele terá um objeto pelo qual a lista recebe, exemplo:
Este é o DTO que uso para criar os ceckboxes:
Não esqueça dos GETS/SETS,
public class DoadoresWrapper {
private Doador doador;
private boolean selecionado;
}
A dataTable fica assim:
<?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>
<rich:popupPanel id="modalPanelDoador" modal="false" width="600"
moveable="false">
<f:facet name="header">
<h:outputText value="Defina os doadores"></h:outputText>
</f:facet>
<f:facet name="controls">
<h:outputLink value="#" style="text-decoration:none;"
onclick="#{rich:component('modalPanelDoador')}.hide(); return false;">X</h:outputLink>
</f:facet>
<rich:dataTable value="#{atendimentoBean.listaDoadores}"
var="_doador" style="width: 100%;"
noDataLabel="Não existem receptores cadastrados.">
<rich:column width="40%">
<f:facet name="header">
<h:outputText value="Selecione" />
</f:facet>
<h:selectBooleanCheckbox value="#{_doador.selecionado}" />
</rich:column>
<rich:column width="40%">
<f:facet name="header">
<h:outputText value="Nome do Doador" />
</f:facet>
<h:outputText value="#{_doador.doador.nomeDoador}"></h:outputText>
</rich:column>5
<rich:column width="25%">
<f:facet name="header">
<h:outputText value="Tipo sanguíneo do doador" />
</f:facet>
<h:outputText value="#{_doador.doador.tipoSanguineo}"></h:outputText>
</rich:column>
<rich:column width="25%">
<f:facet name="header">
<h:outputText value="Tipo Hemoderivado do doador" />
</f:facet>
<h:outputText value="#{_doador.doador.tipoHemo}"></h:outputText>
</rich:column>
</rich:dataTable>
<a4j:commandButton value="OK"
onclick="#{rich:component('modalPanelDoador')}.hide(); return false;" />
</rich:popupPanel>
<br />
</f:view>
</h:body>
</html>
a minha lista é povoada assim:
tenho estes atributos no ManagedBean:
private List<DoadoresWrapper> listaDoadores;
private List<Doador> doadoresSelecionados;
para povoar a DataTable uso isto, que basicamente percorre a lista de DoadoresWrappers (que é um DTO, contendo objetos do tipo DOADOR), onde se a lista for igual a null ou não ter registros, isEmtpy, a list<Doador> recebe a implementação no service de listagem de todos os registros
public List<DoadoresWrapper> getListaDoadores() {
if (this.listaDoadores == null) {
List<Doador> doadores = new DoadorService().listarTodos();
, e posteriormente será atribuída ao DTO
this.listaDoadores = new ArrayList<DoadoresWrapper>();
if (doadores != null && !doadores.isEmpty()) {[/code]
é iterada
[code] for (Doador doador : doadores) {
DoadoresWrapper doadorWrapper = new DoadoresWrapper();
doadorWrapper.setDoador(doador);
adicionado o doador selecionado ao DTO:
listaDoadores.add(doadorWrapper);
}
}
}
return this.listaDoadores;
}
Ao salvar mais um truque:
Ao salvar, o método é chamado a partir de uma iteração no botão (commandButton), depois…
public void salvar(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
try {
… a lista de doadores(a tabela) é percorrida
List<Doador> doadores = new ArrayList<Doador>();
for (DoadoresWrapper doadoresWrapper : listaDoadores) {
Se for selecionada…
if (doadoresWrapper.isSelecionado()) {
Será adicionada a lista de doadores…
doadores.add(doadoresWrapper.getDoador());
}
A partir daqui pode não ser importante para vocẽ
List<Receptor> receptores = new ArrayList<Receptor>();
for (Receptor receptorSelecionado : receptores) {
receptores.add(receptorSelecionado);
}
}
atendimentoEdicao.setReceptor(receptorSelecionado);
atendimentoEdicao.setDoadores(doadores);
Aqui tudo é setado…
new AtendimentoService().salvar(this.atendimentoEdicao);
atendimentoEdicao.setDoadores(doadores);[/code]
detalhe: para "setar" como true o isSelecionado:
Isso no lugar da h:dataTable:
[code]<rich:column width="40%">
<f:facet name="header">
<h:outputText value="Selecione" />
</f:facet>
<h:selectBooleanCheckbox value="#{_doador.selecionado}" />
</rich:column>
Respondendo tua dúvida sobre os radioButtons:
para obter qualquer atributo a partir de uma dataTable:
usará isso, caso use richfaces, para JSF Puro usará apenas HTMLDataTable.
private UIDataTable uiDataTable;
para obter um valor selecionado a partir de uma linha:
public void setReceptorSelecionado(ValueChangeEvent event) {
receptorSelecionado = (Receptor) uiDataTable.getRowData();
System.out.println(receptorSelecionado);
listaReceptores = new ArrayList<Receptor>();
listaReceptores.add(receptorSelecionado);
}
No método de salvar, mais um truque:
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());
}
Aqui, percorro a lista de receptores, setando o selecionado, à partir do que obtive no método setReceptorSelecionado:
List<Receptor> receptores = new ArrayList<Receptor>();
for (Receptor receptorSelecionado : receptores) {
receptores.add(receptorSelecionado);
}
após isso, basta salvar, mas ainda tem um problema: é possível selecionar mais de um ao mesmo tempo, podendo ser problemático, solução: http://balusc.blogspot.com.br/2006/06/using-datatables.html e http://balusc.blogspot.com.br/2006/06/using-datatables.html, mas não consegui implementar, por isso, se conseguir, quero muito a sua ajuda.
Qualquer dúvida este é meu e-mail: smnjr@Hotmail.com
Se for implementar minha dica, me ajuda também, por favor.
Detalhe, preciso de uma mão aqui…
http://www.guj.com.br/java/290173-problema-com-selectoneradio-em-datatable#1535364
Foi útil? Conseguiu?