Estouro de Array em diferentes Users

1 resposta
Ironlynx
Nessa JSP:
<%@ page language="java" import="com.siap.*,org.prevayler.*" %>
<% Prevayler prevayler=(Prevayler)this.getServletContext().getAttribute("prevayler");
SistemaAcademico siap=(SistemaAcademico)prevayler.prevalentSystem();
Usuario usuario=(Usuario)session.getAttribute("usuario");
Turma[] turmas=siap.getTurmas();
 
  String[] escolha=request.getParameterValues("turma");
  Turma[] selecionadas=new Turma[escolha.length];
  if(escolha!=null){
  for(int i=0;i<turmas.length;i++){
   for(int j=0;j<escolha.length;j++) 
    if(turmas[i].getIdTurma().equals(escolha[j]))
        selecionadas[j++]=turmas[i]; 
                                   }
 MatriculaTransaction transacao=new MatriculaTransaction(usuario,selecionadas);
 prevayler.execute(transacao);
                   }
 %>
<html><head><title>SIAP2004</title>
</head>
<body bgcolor="white">
&lt;CAPTION&gt;<font face="ariel" color="#000000">&lt;marquee&gt;
<b><i> SISTEMA DE INFORMAÇÕES ACADÊMICAS PREVALENTE </i></b></font>&lt;/CAPTION&gt;&lt;/marquee&gt;

&lt;center&gt;&lt;TABLE BORDER=0&gt;&lt;caption&gt;Disciplinas Matriculadas:&lt;/caption&gt;
&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt; Turma&lt;/th&gt;&lt;th&gt; Matéria&lt;/th&gt;&lt;th&gt; Professor&lt;/th&gt;&lt;th&gt; Dia(s)&lt;/th&gt;&lt;th&gt; Horário&lt;/th&gt;&lt;th&gt; Sala&lt;/th&gt;&lt;th&gt; Campus&lt;/th&gt;&lt;/tr&gt;

&lt;%  Turma t;  
      for(int i=0;i&lt;siap.proximaMatriculaId();i++){
         Matricula mat=siap.getMatricula(new Integer(i));
         if(mat.aluno.matricula.equals(usuario.matricula)){  
            t=mat.turmas[i];
                  
%&gt;
&lt;tr&gt;&lt;th&gt;&lt;/th&gt; 
&lt;th&gt;&lt;%=t.idTurma%&gt;&lt;/th&gt; 
&lt;th&gt;&lt;%=t.nomeDaMateria%&gt;&lt;/th&gt; 
&lt;th&gt;&lt;%=t.nomeDoProfessor%&gt;&lt;/th&gt; 
&lt;th&gt;&lt;%=t.diaDaSemana%&gt;&lt;/th&gt; 
&lt;th&gt;&lt;%=t.horario%&gt;&lt;/th&gt; 
&lt;th&gt;&lt;%=t.nomeSala%&gt;&lt;/th&gt; 
&lt;th&gt;&lt;%=t.nomeCampus%&gt;&lt;/th&gt; 
&lt;/tr&gt; 
&lt;% ;
 }
 }
   %&gt; 

&lt;/TH&gt;&lt;/TR&gt;
&lt;/TABLE&gt;&lt;/center&gt;
&lt;center&gt;
&lt;INPUT TYPE="button" VALUE="Voltar" onClick="history.back()"&gt;
&lt;/center&gt;
&lt;/body&gt;
&lt;/html&gt;
Quando dois usuários diferentes escolhem a mesma turma,acaba dando um estouro do array em: t=mat.turmas[i]; Isso não é possível,pois cada usuário possui matrícula própria,e a turma escolhida por cada um é própria de cada Matrícula. Ah,o proximaMatriculaId() é apenas um método que retorna o tamanho do HashMap de matrículas. Se alguem conseguir ver algo...agradeço!!! :)

1 Resposta

Ironlynx
Ah,esqueci de postar a MatriculaTransaction:
package com.siap;

import java.io.Serializable;
import org.prevayler.*;
import org.prevayler.Transaction; 
import java.util.Date;

public class MatriculaTransaction implements Serializable,Transaction{
	
    private final String usuarioMat;
    private final Turma[] turmasSelecionadas;
         
    
	public MatriculaTransaction(Usuario usuario,Turma[] turmas){
	  usuarioMat=usuario.matricula;
	  turmasSelecionadas=turmas;		
	}
	
	public void executeOn(Object system, Date data) { 
      Matricula mat=null;
      SistemaAcademico siap=(SistemaAcademico)system;
      int id=siap.proximaMatriculaId();
      if(!Matricula.verificaMatricula(id,siap.getUsuario(usuarioMat),turmasSelecionadas,data)){
         throw new IllegalArgumentException("Parâmetros Inválidos Para Matrícula!");                  }
         mat=new Matricula(id,siap.getUsuario(usuarioMat),turmasSelecionadas,data);
         siap.adicionaMatricula(mat); 
    } 

	
}
E a MAtricula em si:
package com.siap;
import java.io.*;
import java.util.*;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.BasicConfigurator;

public class Matricula implements Serializable{
 static final Logger LOGGER = Logger.getLogger(Matricula.class);
    public final int id;
    public final Usuario aluno;
    public final Turma[] turmas;
    private final Date data;
    List listaMaterias=new ArrayList();
 
 //construtor q mostrará s matrículas na Web   
 public Matricula(int id,Usuario aluno,Turma[] turmas,Date data){
 	BasicConfigurator.configure();
 	this.id=id;
 	this.aluno=aluno;
 	this.turmas=turmas;
  	this.data=data;
 	
   }	
   
  public static boolean verificaMatricula(int id,Usuario aluno,Turma[] turmas,Date data){
     if(aluno==null)return true;
     if(turmas==null)return false;
     if(data==null)return false;
     return true;   	
   	}
   	
  public void log() {
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug(this.aluno);
        LOGGER.debug(this.turmas);
    }
} 	   
   		
 }//fim da classe Matricula
Criado 19 de novembro de 2004
Ultima resposta 19 de nov. de 2004
Respostas 1
Participantes 1