Boa tarde galera, tudo certo? Bem, na minha aplicação estou fazendo as rematrículas automáticas dos alunos de uma turma. Nela, faço o seguinte: tenho uma lista de matrículas (matriculasListSemLazy-> essa lista contém alunos aprovados e reprovados). Bem, em um método estou separando os alunos Aprovados para uma lista e os Reprovados em outra. Os alunos Aprovados serão Rematriculados para uma turma do próximo ano e os Rematriculados a mesma coisa. O método já está funcionando, os alunos já estão sendo separados, só que não estou conseguindo atualizar a tela.
Por exemplo, tenho dois alunos ( um aprovado e outro reprovado). Vou rematriculá-los, escolhi a turma de cada um e executei o método. GEROU A REMATRÍCULA. Porém, se ele clicar em gerar rematrícula novamente, esses alunos são REMATRICULADOS NOVAMENTE. Onde, que, pelo certo, ele deveria “cair” em um validador para ver que as listas não estão vazias e que esses alunos já estão rematriculados. Mas, se após eu gerar a rematrícula para os alunos eu der um F5 na página, ele “cai” no validador e verifica que a lista não está vazia. Abaixo, o xhtml:
<?xml version='1.0' encoding='UTF-8' ?>
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:treap="http://java.sun.com/jsf/composite/treap"
xmlns:p="http://primefaces.org/ui">
<body>
<ui:composition template="./default_layout_with_menu.xhtml">
<ui:define name="titulo-pagina">
Rematrícula Automática
</ui:define>
<ui:define name="content">
<treap:ajaxStatus/>
<p:growl id="growl2" life="4000"/>
<p:focus for="escola"/>
<p:panel id="dados" header="Dados Principais" >
<h:panelGrid columns="3" width="100%">
<h:panelGrid columns="2">
<p:outputLabel id="ano_label" value="Ano Atual:" for="ano"/>
<h:outputText id="ano" value="#{matriculaJsfBean.ano}"/>
<p:outputLabel id="escola_label" value="Escola Atual:" for="escola"/>
<p:selectOneMenu id="escola" value="#{matriculaJsfBean.escolaRematricula}" filter="true" required="true" requiredMessage="Selecione a Escola." caseSensitive="false" filterMatchMode="contains">
<f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
<f:selectItems value="#{matriculaJsfBean.escolaList}" var="e" itemLabel="#{e.codigo} - #{e.nome}" itemValue="#{e.codigo}"/>
<p:ajax update="turma novaTurmaA novaTurmaR" event="change" listener="#{matriculaJsfBean.atualizarTurmaPorEscolaSemSessao(event)}"/>
</p:selectOneMenu>
<p:outputLabel id="turma_label" value="Turma Atual:" for="turma"/>
<p:selectOneMenu id="turma" converter="sec" value="#{matriculaJsfBean.turma}" filter="true" required="true" requiredMessage="Selecione a Turma." caseSensitive="false" filterMatchMode="contains">
<f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
<f:selectItems value="#{matriculaJsfBean.turmaList}" var="t" itemLabel="#{t.codigo} - #{t.descricao}" itemValue="#{t}"/>
</p:selectOneMenu>
</h:panelGrid>
<h:panelGrid columns="2">
<p:outputLabel id="proximoAnoA_label" value="Próximo Ano:" for="proximoAnoA"/>
<h:outputText id="proximoAnoA" value="#{matriculaJsfBean.proximoAno}"/>
<p:outputLabel id="novaTurmaA_label" value="Nova Turma Aprovados:" for="novaTurmaA"/>
<p:selectOneMenu id="novaTurmaA" converter="sec" value="#{matriculaJsfBean.novaTurma}" filter="true" required="true" requiredMessage="Selecione a Turma Destino." caseSensitive="false" filterMatchMode="contains">
<f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
<f:selectItems value="#{matriculaJsfBean.turmaListDestino}" var="t" itemLabel="#{t.ano} - #{t.descricao}" itemValue="#{t}"/>
</p:selectOneMenu>
</h:panelGrid>
<h:panelGrid columns="2">
<p:outputLabel id="proximoAnoR_label" value="Próximo Ano:" for="proximoAnoR"/>
<h:outputText id="proximoAnoR" value="#{matriculaJsfBean.proximoAno}"/>
<p:outputLabel id="novaTurmaR_label" value="Nova Turma Reprovados:" for="novaTurmaR"/>
<p:selectOneMenu id="novaTurmaR" converter="sec" value="#{matriculaJsfBean.novaTurmaReprovados}" filter="true" required="true" requiredMessage="Selecione a Turma Destino." caseSensitive="false" filterMatchMode="contains">
<f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
<f:selectItems value="#{matriculaJsfBean.turmaListDestino}" var="tR" itemLabel="#{tR.ano} - #{tR.descricao}" itemValue="#{tR}"/>
</p:selectOneMenu>
</h:panelGrid>
</h:panelGrid>
<br/>
<p:commandButton id="BtnfiltraMatricula" actionListener="#{matriculaJsfBean.atualizar()}" value="Consultar" update="tabela1 tabela2 tabela3 @form" process="dados @form" image="search"/>
<p:commandButton action="#{matriculaJsfBean.geraRematricula()}" value="Gerar Rematrícula" update="@form" image="ok"/>
<p:confirmDialog id="confirmDialogA" message="Ultrapassou #{matriculaJsfBean.vagasIndisponiveisTurmaAprovados} das vagas para rematrícula de aprovados. Continuar?" header="Rematrícula Aprovados" severity="alert" widgetVar="vagasTurmaAprovados">
<p:commandButton id="confirmA" value="Sim" update="@form" oncomplete="vagasTurmaAprovados.hide()" actionListener="#{matriculaJsfBean.rematAlunos_A_R_novaTurma()}" image="ok"/>
<p:commandButton id="declineA" value="Cancelar" onclick="vagasTurma.hide();" image="cancel2"/>
</p:confirmDialog>
<p:confirmDialog id="confirmDialogR" message=" Ultrapassou #{matriculaJsfBean.vagasIndisponiveisTurmaReprovados} das vagas para rematrícula de reprovados. Continuar?" header="Rematrícula Reprovados" severity="alert" widgetVar="vagasTurmaReprovados">
<p:commandButton id="confirmR" value="Sim" update="@form" oncomplete="vagasTurmaReprovados.hide()" actionListener="#{matriculaJsfBean.rematAlunos_A_R_novaTurma()}" image="ok"/>
<p:commandButton id="declineR" value="Cancelar" onclick="vagasTurma.hide();" image="cancel2"/>
</p:confirmDialog>
<p:confirmDialog id="confirmDialogAR" message="Ultrapassou #{matriculaJsfBean.vagasIndisponiveisTurmaAprovados} das vagas para rematrícula de aprovados e #{matriculaJsfBean.vagasIndisponiveisTurmaReprovados} para rematricula de reprovados. Continuar?" header="Rematrícula" severity="alert" widgetVar="vagasTurmaAprovadoReprovado">
<p:commandButton id="confirmAR3" value="Sim" update="@form" oncomplete="vagasTurmaAprovadoReprovado.hide()" actionListener="#{matriculaJsfBean.rematAlunos_A_R_novaTurma()}" image="ok"/>
<p:commandButton id="declineAR" value="Cancelar" onclick="vagasTurma.hide();" image="cancel2"/>
</p:confirmDialog>
<br/><br/>
<p:dataTable id="tabela1"
value="#{matriculaJsfBean.matriculasListSemLazy}"
var="item"
emptyMessage="Nenhum registro encontrado."
paginator="false"
lazy="false">
<f:facet name="header">
Rematrículas de Alunos Turma : #{matriculaJsfBean.turma.ano} #{matriculaJsfBean.turma}
</f:facet>
<p:column headerText="Código" sortBy="#{item.codigo}" style="width:07%">
<h:outputText value="#{item.codigo}"/>
</p:column>
<p:column headerText="Aluno">
<h:outputText value="#{item.aluno.nome}"/>
</p:column>
<p:column headerText="Situação">
<h:outputText value="#{item.statusCompleto}"/>
</p:column>
</p:dataTable>
<br/>
</p:panel>
<br/><br/>
<p:panel id="panelTabela">
<p:panelGrid columns="2" style="width: 100%">
<p:dataTable id="tabela2"
value="#{matriculaJsfBean.rematriculaAprovados}"
var="item"
emptyMessage="Nenhum registro encontrado."
paginator="true"
rows="10"
pageLinks="5"
paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink}
{PageLinks} {NextPageLink} {LastPageLink} Exibir: {RowsPerPageDropdown}
Encontrados: #{matriculaJsfBean.rematriculaAprovados.size()}"
rowsPerPageTemplate="10,25,35,50"
lazy="false">
<f:facet name="header">
Matrícula Alunos Aprovados Turma: #{matriculaJsfBean.novaTurma.ano} #{matriculaJsfBean.novaTurma}
</f:facet>
<p:column headerText="Código" sortBy="#{item.codigo}" style="width:07%">
<h:outputText value="#{item.codigo}"/>
</p:column>
<p:column headerText="Aluno">
<h:outputText value="#{item.aluno.nome}"/>
</p:column>
</p:dataTable>
<p:dataTable id="tabela3"
value="#{matriculaJsfBean.rematriculaReprovados}"
var="item"
emptyMessage="Nenhum registro encontrado."
paginator="true"
rows="10"
pageLinks="5"
paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink}
{PageLinks} {NextPageLink} {LastPageLink} Exibir: {RowsPerPageDropdown}
Encontrados: #{matriculaJsfBean.rematriculaReprovados.size()}"
rowsPerPageTemplate="10,25,35,50"
lazy="false">
<f:facet name="header">
Matrícula Alunos Reprovados Turma: #{matriculaJsfBean.novaTurmaReprovados.ano} #{matriculaJsfBean.novaTurmaReprovados}
</f:facet>
<p:column headerText="Código" sortBy="#{item.codigo}" style="width:07%">
<h:outputText value="#{item.codigo}"/>
</p:column>
<p:column headerText="Aluno">
<h:outputText value="#{item.aluno.nome}"/>
</p:column>
</p:dataTable>
</p:panelGrid>
</p:panel>
</ui:define>
</ui:composition>
</body>
</html>
Na linha 71 que tenho método geraRematrícula. Abaixo o bean:
private Turma novaTurma = new Turma();
private Turma novaTurmaReprovados = new Turma();
private Turma turma;
private List<Matricula> rematriculaAprovados = new ArrayList<Matricula>();
private List<Matricula> rematriculaReprovados = new ArrayList<Matricula>();
private List<Matricula> matriculasListSemLazy = new ArrayList<Matricula>();
private List<Matricula> rematriculaAprovadosAuxiliar = new ArrayList<Matricula>();
private List<Matricula> rematriculaReprovadosAuxiliar = new ArrayList<Matricula>();
@Override
public void atualizar() {
matriculasListSemLazy.clear();
rematriculaAprovados.clear();
rematriculaReprovados.clear();
matriculasListSemLazy = crudService.executeNativeQuery("select * from edu_matriculas m "
+ "inner join edu_escolas e on m.mat_codescola = e.esc_codigo "
+ "inner join edu_turmas t on t.tur_codigo = m.mat_codturma "
+ "where m.mat_codescola = " + escolaRematricula + ""
+ "and m.mat_codturma = " + turma.getCodigo() + "", Matricula.class);
rematriculaAprovados = crudService.executeNativeQuery("select * from edu_matriculas m "
+ "inner join edu_escolas e on m.mat_codescola = e.esc_codigo "
+ "inner join edu_turmas t on t.tur_codigo = m.mat_codturma "
+ "where m.mat_codescola = " + escolaRematricula + ""
+ "and m.mat_codturma = " + novaTurma.getCodigo() + "", Matricula.class);
rematriculaReprovados = crudService.executeNativeQuery("select * from edu_matriculas m "
+ "inner join edu_escolas e on m.mat_codescola = e.esc_codigo "
+ "inner join edu_turmas t on t.tur_codigo = m.mat_codturma "
+ "where m.mat_codescola = " + escolaRematricula + ""
+ "and m.mat_codturma = " + novaTurmaReprovados.getCodigo() + "", Matricula.class);
}
public void geraRematricula() {
for (Matricula matricula : matriculasListSemLazy) {
if (matricula.getStatus().equals("A")) {
rematriculaAprovadosAuxiliar.add(matricula);
} else if (matricula.getStatus().equals("R")) {
rematriculaReprovadosAuxiliar.add(matricula);
}
}
if (rematriculaReprovadosAuxiliar.size() > novaTurmaReprovados.getDisponivel() && rematriculaAprovadosAuxiliar.size() < novaTurma.getDisponivel()) {
primeFacesExecute("vagasTurmaReprovados.show();");
} else if (rematriculaAprovadosAuxiliar.size() > novaTurma.getDisponivel() && rematriculaReprovadosAuxiliar.size() < novaTurmaReprovados.getDisponivel()) {
primeFacesExecute("vagasTurmaAprovados.show();");
} else if (rematriculaAprovadosAuxiliar.size() > novaTurma.getDisponivel() && rematriculaReprovadosAuxiliar.size() > novaTurmaReprovados.getDisponivel()) {
primeFacesExecute("vagasTurmaAprovadoReprovado.show();");
} else {
rematAlunos_A_novaTurma();
rematAlunos_R_novaTurma();
}
atualizar();
}
public void rematAlunos_A_R_novaTurma() {
rematAlunos_A_novaTurma();
rematAlunos_R_novaTurma();
atualizar();
}
public void rematAlunos_A_novaTurma() {
try {
if (novaTurma != null && !novaTurma.getMatriculaCollection().isEmpty()) {
Iterator<Matricula> it = rematriculaAprovadosAuxiliar.iterator();
while (it.hasNext()) {
Matricula matParaRematricular = it.next();
for (Matricula matNovaTurma : novaTurma.getMatriculaCollection()) {
if (matParaRematricular.getAluno().getCodigo().toString().equals(matNovaTurma.getAluno().getCodigo().toString())) {
it.remove();
}
}
}
for (Matricula novaMatricula : rematriculaAprovadosAuxiliar) {
matriculaAlunos(novaMatricula, novaTurma);
}
info("Matriculas da turma " + novaTurma.getDescricao() + ", atualizadas");
} else {
for (Matricula novaMatricula : rematriculaAprovadosAuxiliar) {
matriculaAlunos(novaMatricula, novaTurma);
}
info("Alunos rematriculados para a turma " + novaTurma.getDescricao() + ".");
}
} catch (Exception exception) {
fatal("Erro ao gerar as matrículas automáticas");
fatal(exception.getMessage());
} finally {
atualizar();
}
}
Meu rematAlunos_R_novaTurma(); faz a mesma coisa que o rematAlunos_A_novaTurma(). Se alguém souber como posso fazer algum tipo de update ou algo similar, ou até mesmo para desabilitar o botão Gera Rematrícula, pois a parte de gerar a rematrícula está funcionando. Além disso, se após eu gerar a rematrícula para os alunos eu der um F5 na página, ele “cai” no validador e verifica que a lista não está vazia…Se alguém puder ajudar, agradeço mto…Vlw