Tô tentando pegar os parâmetros(na verdade são as turmas),escolhidas pelo usuário,mas sempre me retorna um null enjoado…se alguem souber uma forma de fazer isso “mais light”,agradeço…Mátricula:
e a página q pega as turmas e grava.(e exibe as escolhidas tb!):
<% Turma t;
for(int i=0;i<siap.proximaMatriculaId();i++){
Matricula mat=siap.getMatricula(new Integer(i));
if(mat.aluno.matricula.equals(usuario.matricula)){
t=(Turma)mat.turmas.get(i);
%> …[/code]
Mas em: escolha[i]=request.getParameter(“turma”+i);
Vem sempre todas,mesmo a q eu não marco…mesmo tentando(escolha[i]!=null) as não marcadas vem…
Consequentemente,em: t=(Turma)mat.turmas.get(i);
recebo no arraylist um:
IndexOutOfBoundsException: Index: 0, Size: 0
Alguem aí tem experiência em dynamic checkboxes??? :roll: :? :x :oops:
Coloque o mesmo nome em todos os checkboxes, mudando apenas o “value” de cada um. Entao vc usa request.getParameterValues(“turmas”) para pegar os valores
Rafael,isso eu já fazia aqui: http://www.guj.com.br/posts/list/17674.java
Mas somente a primeira turma(entre as q eram marcadas),era salvo!
Na verdade,o que tá me matando,é esse “refinamento” em matrícula.jsp: if((turma.getCurso()).equals(usuario.idCurso))
Entre as turmas do sistema,ele pega a para esse aluno,e entre essas,eu quero pegar as que o aluno marcar!
Meu professor de projeto disse q com getParameterValues() daria esse erro de só pegar a primeira,e me sugeriu o campo hidden,mas o problema é vem as q eu quero(marcadas) e as q eu não quero(com null!)…idéias serão beeeem vindas…na verdade,só falta corrigir esse mardito bug(e os q dele derivam,pois é a matrícula do aluno)para finalizar meu projeto final! :roll:
Nao tem como dar pau nisso. Digo, o getParameterValues() vai pegar todos os valores. Se ta falhando, nao eh nele. Veja em http://www.jforum.net/checkboxes.jsp. O codigo eh simples:
Rafael, seria ótimo se fosse tão fácil assim…
Vc deu um nome a cada valor!!!Eu tenho q pegar os da turma para poder
saber q uma delas foi selecionada!!!
Repare nesse detalhe do meu Matrícula.jsp:
<% Turma turma=new Turma();
for(int i = 0; i < turmas.length; i++){
if((turmas[i].getCurso()).equals(usuario.idCurso)){
turma=turmas[i];
%>
<tr><th><input type=CHECKBOX name="turma" value="<%=turma.idTurma%>"></th>
O value é o idTurma!(Cada turma tem um tipo “0001” ou “0020”)
if(marcadas!=null && marcadas.length!=0){
for(int i=0;i<turmas.length;i++){
for(int x=0;x<marcadas.length;x++)
if(turmas[i].getIdTurma().equals(marcadas[x]))
selecionadas.add(turmas[i]);
}[/code]
Onde: if(turmas[i].getIdTurma().equals(marcadas[x]))
Compara o id das Turmas no sistema com a q foi selecionada,se foi,adiciona a lista para depois ser persistida.
Mesmo assim, somente a primeira marcada é pega!!!(ainda que eu marque todas!)
Consegue ver algum detalhe que eu não estou vendo…(arrrrghhh!!! :shock: :?: :?: :?: )
[size=7]porque eu fui inventar de fazer o projeto em web, se eu conheço bem é desktop(para aprender,mas experimentações ás vezes custam caro…c@r@lh0!!!)[/size]>
Bom, dei uma mexida no codigo, veja se funciona agora. Uma coisa que voce deveria mudar eh esse uso descarado de arrays :). Eh muito chato ter que ficar fazendo loops para verificar as opcoes. Se voce colocar em um Map, indexado pelo id da turma, vai ser muito mais simples de trabalhar.
Pelo que entendi do teu codigo, voce lista para o aluno todas as turmas do curso dele, e permite que o mesmo selecione algumas para que seja feita a matricula. Entao, no processamento dos dados, voce tem que pegar as turmas selecionadas, persiti-las ( fazendo o relacionamento com o usuario ), e entao mostrar na tela as turmas nas quais o aluno esta matriculado, apos o processamento.
Caso ainda nao funcione, verifique se voce nao esta procurando o erro no lugar errado. Em outras palavras, pode ocorrer as vezes dos valores estarem persistidos “corretamente”, porem a logica que mostra / pega os valores nao estarem corretos.
<%@ page language="java" import="com.siap.*,org.prevayler.*" %>
<%
Prevayler prevayler = (Prevayler)this.getServletContext().getAttribute("prevayler");
Turma[] turmas = ((SistemaAcademico)prevayler.prevalentSystem()).getTurmas();
Usuario usuario = (Usuario)session.getAttribute("usuario");
//quantidade de turmas
int j = 0;
%>
<html>
<body>
<h3>Turmas liberadas para cursar:</h3>
<form method="POST" action="matriculaConfirmada.jsp">
<table border=0><caption>Selecione as disciplinas para matrícula:</caption>
<tr><th></th><th> Turma</th><th> Matéria</th><th> Professor</th><th> Dia(s)</th><th> Horário</th><th> Sala</th><th> Campus</th></tr>
<%
Turma turma = null;
for (int i = 0; i < turmas.length; i++, j++) {
turma = turmas[i];
if (turma.getCurso()).equals(usuario.idCurso) {
%>
<tr><th><input type="checkbox" name="turma" value="<%= turma.idTurma%>"></th>
<th><%=turma.idTurma%></th>
<th><%=turma.nomeDaMateria%></th>
<th><%=turma.nomeDoProfessor%></th>
<th><%=turma.diaDaSemana%></th>
<th><%=turma.horario%></th>
<th><%=turma.nomeSala%></th>
<th><%=turma.nomeCampus%></th>
</tr>
<%
}
}
%>
</table>
<center>
<input type="hidden" name="qtdturmas" value="<%= j%>">
<input type="submit" value="Matricular"></center>
</form></body></html>
<%@ page language="java" import="com.siap.*,org.prevayler.*" %>
<%
// Pega o sistema Prevalente
Prevayler prevayler = (Prevayler)this.getServletContext().getAttribute("prevayler");
SistemaAcademico siap = (SistemaAcademico)prevayler.prevalentSystem();
// Pega os dados do usuario e todas as turmas
// registradas no sistema
Usuario usuario = (Usuario)session.getAttribute("usuario");
Turma[] turmas = siap.getTurmas();
// Matricula o aluno nas turmas selecionadas por ele
String[] turmasSelecionadas = request.getParameterValues("turma");
if (turmasSelecionadas != null) {
Turma[] turmasMatricula = new Turma[turmasSelecionadas.length];
for (int i = 0, t = 0; i < turmasSelecionadas.length; i++) {
System.out.println("Processando turma selecionada: "
+ turmasSelecionadas[i]);
for (int j = 0; j < turmas.length; j++) {
if (turmas[j].getIdTurma().equals(turmasSelecionadas[i])) {
System.out.pritnln("Encontrado registro. Pegando referencia");
turmasMatricula[t++] = turmas[i];
}
}
}
MatriculaTransaction transacao = new MatriculaTransaction(usuario, turmasMatricula);
prevayler.execute(transacao);
}
%>
<html>
<body>
<CAPTION><marquee>
SISTEMA DE INFORMAÇÕES ACADÊMICAS PREVALENTE </CAPTION></marquee>
<center><TABLE BORDER=0><caption>Disciplinas Matriculadas:</caption>
<tr><th></th><th> Turma</th><th> Matéria</th><th> Professor</th><th> Dia(s)</th>
<th> Horário</th><th> Sala</th><th> Campus</th></tr>
<%
for (int i = 0; i < siap.proximaMatriculaId(); i++) {
Matricula mat = siap.getMatricula(new Integer(i));
if (mat.aluno.matricula.equals(usuario.matricula)) {
Turma t = mat.turmas[i];
%>
<tr><th></th>
<th><%=t.idTurma%></th>
<th><%=t.nomeDaMateria%></th>
<th><%=t.nomeDoProfessor%></th>
<th><%=t.diaDaSemana%></th>
<th><%=t.horario%></th>
<th><%=t.nomeSala%></th>
<th><%=t.nomeCampus%></th>
</tr>
<%
}
}
%>
</TH></TR>
</TABLE></center>
<center>
<INPUT TYPE="button" VALUE="Voltar" onClick="history.back()">
</center>
</body>
</html>
String[] turmasSelecionadas = request.getParameterValues("turma");
if (turmasSelecionadas != null) {
Turma[] turmasMatricula = new Turma[turmasSelecionadas.length];
for (int i = 0, t = 0; i < turmasSelecionadas.length; i++) {
System.out.println("Processando turma selecionada: "
+ turmasSelecionadas[i]);
for (int j = 0; j < turmas.length; j++) {
if (turmas[j].getIdTurma().equals(turmasSelecionadas[i])) {
System.out.println("Encontrado registro. Pegando referencia");
turmasMatricula[t++] = turmas[i];
}
}
}
Fiz para testar…e:O Aluno foi matriculado numa turma q sequer estava disponível para ele fazer matrícula! :shock: :shock: :shock:
Deve ser por causa do seu segundo for(-todas as turmas deveriam ser varridas primeiro não?para depois varrer as escolhidas???)!Ah, a única diferença é q meu turmasMatricula é um ArrayList!!!
Não entendi direito a idéia do Map,poderia exemplificar melhor?
o getTurmas é apenas um método assim(dentro da Classe SistemaAcademico) q retorna todas as turmas do sistema:
public Turma[] getTurmas() {
return this.turmas;
}
Q retorna todas as turmas do Sistema.Teoricamente,não era para eu ter problemas,pois o id de cada uma é único!!! :shock:
Rafael,mesmo invertendo o for acontece a mesma coisa!(Q estranho…)
A turma marcada sequer está disponível para o Aluno!!! :shock: :?
Mas executando esse trecho:
if (turmas[j].getIdTurma().equals(turmasSelecionadas[i])) {
System.out.println("Encontrado registro. Pegando referencia");
turmasMatricula.add(turmas[i]); }
No log do tomcat mostra a execução 2 vezes dessa iteração(eu escolhi 2,de 3 turmas disponíveis para a matrícula!!!),o q teoricamente estaria certo.Por que persiste errado? :?: :?: :?:
Q erro imbecil!!!Argh…eu tava procurando erro onde não tinha,pqp!!! :?
Ainda bem q existe debug…(acho q daqui para frente meu código terá o dobro do tamanho!!!).O erro era uma simples exibição correta(iteração) do 4rrayList
no:
<% Turma t;
for(int i=0;i<siap.proximaMatriculaId();i++){
Matricula mat=siap.getMatricula(new Integer(i));
if(mat.aluno.matricula.equals(usuario.matricula)){
for (int x=0;x<mat.turmas.size(); x++){
t=(Turma)mat.turmas.get(x);
%>
[size=7]Ninguem viu,ninguem vê…hauhaha…caraio procurei um pneu num prato de sopa…das 3 formas diferentes q fiz funcionavam!Com o getParameterValues,getParameter e o getParameterNames…[/size]
Dica:Não testem o próprio código.A chance de passar erros boçais é grande…Experiência própria. :roll: