Boa noite pessoal, preciso de uma ajuda, pois estou horas tentando achar algo que funcione e não vai…
Tenho um datatable dentro de um dialog e preciso que pegar os valores de componentes SelectOneMenu, só que eu tenho uma associação de conteudos e cada linha deve ir uma grupo de alunos para serem avaliados, montei de uma forma mas ao preencher o último elemento o primeiro é atualizado e todos na coluna ficam com o mesmo valor, sei que o problema está na forma que estou usando o p:columns. Mas não sei como fazer diferente…
Segue o meu datatable e o bean, que puder dar uma ajuda ficarei muito grato.
Datatable
<p:dataTable id=“conteudos” var=“row” value="#{MBFormulario.conteudoAlunos}" widgetVar=“formTable” editable=“true” editMode=“cell”>
<p:column headerText="Conteúdos">
<h:outputText value="#{row.conteudo}" />
</p:column>
<p:columns value="#{MBFormulario.alunos}" var="aluno" columnIndexVar="colIndex">
<f:facet name="header">
#{aluno.numero}
</f:facet>
<h:selectOneMenu value="#{row.alunos[colIndex].avaliacao}" style="width:100%">
<f:selectItem itemValue="" itemLabel="Selecione um valor" />
<f:selectItems value="#{MBFormulario.valores}" var="man" itemLabel="#{man}" itemValue="#{man}" />
</h:selectOneMenu>
</p:columns>
</p:dataTable>
Bean
if(formulario != null) {
conteudoAlunos = new ArrayList<FormularioBean.FormRow>();
FormularioDao formularioDao = new FormularioDao();
//Pegar conteúdos da associação FormularioAluno
conteudos = formularioDao.getConteudosByFormID(formulario.getId());
//Pegar alunos da associação FormularioAluno
alunos = formularioDao.getAlunosByFormID(formulario.getId());
//Pegar referencia para dados de alunos no formulario
List<FormularioAluno> formAlunos = formularioDao.getAlunosFormularioByFormID(formulario.getId());
for(Aluno a:alunos) {
columns.add(new ColumnModel(a.getNumero().toString(), "avaliacao"));
}
formularioAlunos = formAlunos;
for(int i = 0, k = 0; i < conteudos.size(); i++) {
FormRow fr = new FormRow();
fr.conteudo = conteudos.get(i);
fr.alunos = formAlunos;
for (int j = 0; j < alunos.size(); j++,k++) {
FormularioAluno formAluno = formAlunos.get(k);
formAluno.setAluno(alunos.get(j));
formAluno.setConteudo(conteudos.get(i));
formAluno.setFormulario(formulario);
}
conteudoAlunos.add(fr);
}
}