Olá Pessoal,
estou com o seguinte problema: Possuo um jsf, onde há um datatable que exibe um graphicImage , um selectBooleanCheckbox e uma outputtext. Ao clicar em um checkbox qualquer, quero chamar um método (StepBean.showSelectedValueEquipment). Ao chamar este método, quero analisar todos os itens do meu datatable que estão com o checkbox marcados.
Para eu verificar se realmente o meu método está sendo chamado, eu apenas inseri o comando System.out.println para retornar os valores do meu datatable. Até então, nenhum problema.
O meu problema neste cenário é o seguinte: eu inicio todos meus checkbox como false. Ao clicar pela primeira vez em um checkbox qualquer, o método showSelectedValueEquipment é chamado, e é impresso em meu log o conteúdo do meu datatable, porém o checkbox que eu selecionei, aparece como falso. Se eu continuar e clicar em um outro checkbox qualquer, o método é chamado novamente, então ele imprime o primeiro checkbox que cliquei como true e o segundo como false (quando digo segundo checkbox, me refiro ao segundo checkbox que cliquei, sendo este em qualquer posicao, décimo, vigésimo, etc…).
Sempre que meu método é chamado, ele imprime o estado anterior do meu datatable, e sempre ignora a ultima alteração que fiz.
O que devo fazer para que ao clicar em um checkbox, ele chame meu método e eu possa retornar os dados atualizados de meu datatable?
<h:dataTable value="#{StepBean.dtRunningExperimentChooseEquipment}" onclick=“submit()” var=“equipment” border=“2” binding="#{StepBean.dataTableRunnigExperimentChooseEquipment}">
<h:column>
<h:graphicImage value="/images/lab.jpg" width="60"/>
</h:column>
<h:column>
<h:selectBooleanCheckbox value="#{equipment.selected}" valueChangeListener="#{StepBean.showSelectedValueEquipment}"></h:selectBooleanCheckbox>
</h:column>
<h:column>
<h:outputLabel value="#{equipment.description}"></h:outputLabel>
</h:column>
</h:dataTable>
public class StepBean {
private List dtRunningExperimentChooseEquipment = new ArrayList();
private UIData dataTableRunnigExperimentChooseEquipment;
gets e sets…
public void showSelectedValueEquipment(ValueChangeEvent event) {
List<RunningExperimentChooseMaterialWrapper> x;
x = ((List<RunningExperimentChooseMaterialWrapper>) dataTableRunnigExperimentChooseEquipment.getValue());
for (int i=0; i < dataTableRunnigExperimentChooseEquipment.getRowCount(); i++) {
System.out.println(x.get(i).getDescription());
System.out.println(x.get(i).getSelected());
System.out.println();
}
}
}
Obrigado!!