Formatar Hora Carregada Pelo DWR Javascript

5 respostas
portugassis

Olá Galera,

Mais uma vez venho aqui pedir uma ajuda com meu primeiro projeto em Java.

Tenho uma página .jsp onde os usuários do sistema poderão criar turmas de um curso, selecionando a disciplina, professores e horários, previamente cadastrados no banco de dados. E funciona da seguinte forma, o usuário seleciona a disciplina, dai na segunda combo box, exibe apenas os professores que podem ministrar a disciplina escolhida, escolhendo o professor serão listadas na outra combo os horários que tal professor tem disponíveis para novas turmas.

O controle dessas combo box foi feito utilizando o DWR e está funcionando muito bem, exceto por um detalhe.

Quando são carregados os horários pelo DWR eles não vem formatados, e também não obedecem a formatação que coloquei (usando jstl fmt) no select, ficando a hora naquele formato estranho - Thu Jan 01 1970 21:00:00 GMT-0200, quando gravo no banco, tudo funciona perfeitamente, o único problema mesmo é a formatação da hora.

Gostaria de saber se tem algum código que possa inserir dentro do select (o combo box) para que quando os dwr mande os dados para lá eles sejam exibidos formatados.

Ou então se tenho como no próprio DWR formatar isso e já mandar para o select formatado.

Abaixo o código da página JSP
<script language="javascript">
	function carregarProfessores() {
		var disciplina = new Object();
		disciplina.id = document.getElementById("iddisciplinaEmTexto").value;
		CombosDependentesLookup.obterProfessores(disciplina, function(data) {
			dwr.util.removeAllOptions("idprofessorEmTexto");
			dwr.util.addOptions("idprofessorEmTexto", {
				"0" : "Selecione..."
			});
			dwr.util.addOptions("idprofessorEmTexto", data, "id", "nome");
		});
	}
</script>
<script language="javascript"> //O script que pega os dados do professor selecionado
	function carregarHorarios() { 
		var professor = new Object();
		professor.id = document.getElementById("idprofessorEmTexto").value;
		CombosDependentesLookup.obterHorarios(professor, function(data) {
			dwr.util.removeAllOptions("idhorarioEmTexto");
			dwr.util.addOptions("idhorarioEmTexto", {
				"0" : "Selecione..."
			});
			dwr.util.addOptions("idhorarioEmTexto", data, "id", "horaInicial"); //aqui é onde os dados são adicionados no select, o que quero formatar é exatamente essa horaInicial ai.
		});
	}
</script>
<c:import url="../cabecalho.jsp" />    
<div class="conteudo"> 
<h2>Adicionar Turmas</h2>
<form action="mvc" class="formulario">
   Data Inicio: <input name="dataInicioEmTexto" type="text" id="dataFimEmTexto" size="50" /><br /><br />
   Data Fim: <input name="dataFimEmTexto" type="text" id="dataFimEmTexto" size="50" /><br /><br />
   
   Disciplina:
   <select name="iddisciplinaEmTexto" id="iddisciplinaEmTexto"
   		onchange="carregarProfessores();">   
		<option value="0">Selecione...</option>     
     	<c:forEach var="disciplina" items="${daoDisciplina.lista}" varStatus="id">
     		<option value="${disciplina.id}">${disciplina.nome}</option>
     	</c:forEach>        
   </select><br /><br />
  
   Professor: 
   <select name="idprofessorEmTexto" id="idprofessorEmTexto"
   		onchange="carregarHorarios();"> 
  		<option value="0">Selecione...</option>       
       	<c:forEach var="professor" items="${daoProfessor.lista}" varStatus="id">
       		<option value="${professor.id}">${professor.nome}</option>
       	</c:forEach>        
   </select><br /><br />
   
   Horário:
   <select name="idhorarioEmTexto" id="idhorarioEmTexto">  
  		<option value="0">Selecione...</option>       
       	<c:forEach var="horario" items="${daoHorario.lista}" varStatus="id">
       		<option value="${horario.id}">
			<fmt:formatDate type="time" value="${horario.horaInicial}"/>   //formatação funciona normal na hora que exibe a lista de horários completa, mas quando carrega os outros horários via javascript a lista é apagada e são adicionados novamente os horários, mas ficam sem a formatação.
			</option>
       	</c:forEach>      
   </select><br /><br />   
   
   Situação:
   <select name="situacao" id="situacao" style="width: 300px;">
	  <option value="Ativa">Ativa </option>
	  <option value="Inativa">Inativa</option>
	  <option value="Em Espera">Em Espera </option>
	</select><br /><br />
	<input type="hidden" name="logica" value="AdicionaTurmaLogic"/>
     <input type="reset" name="cancelar" id="cancelar" value="Cancelar" />
     <input name="gravar" type="submit" id="gravar" value="Gravar" />
</form>
<a href="http://localhost:8080/SGC/admin/">Voltar para o Menu Inicial</a><br/>
</div>

5 Respostas

esdmorais

Boa tarde!

Você pode usar a classe SimpleDateFormat do próprio JAVA.
Dê uma olhada na documentação do JAVA.
Apesar que… você deseja fazer isso com JavaScript?

Guri.

portugassis

Hum... pensei no SimpleDateFormat também, mas não sei como faria isso. o DWR acessa um DAO que tem o médoto que faz a consulta no banco de acordo com o professor selecionado para mostrar os seus respectivos horários, para usar o SimpleDateFormat acho que seria ai, nesse caso ele já mandaria a data formatada.

Porem como vou fazer isso?

Já usei o SimpleDateFormat em outras coisas e funcionou muito bem... mas nesse caso não sei como fazer.

Segue o meu DAO para vc ver como que funciona:

public List<Horario> listar(Professor professor){
		List<Horario> listaHorarios = new ArrayList<Horario>();
		
		PreparedStatement stmt = null;
				
		try {
			String sql = "select * from professor, horario, profhorario where professor.idprofessor = '" + professor.getId() + "' and profhorario.idhorario = horario.idhorario and professor.idprofessor = profhorario.idprofessor group by horario.idhorario";
			
			stmt = connection.prepareStatement(sql);
			
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()) {
				//Criando o objeto Horario
				Horario horario = new Horario();
				horario.setId(rs.getInt("idhorario"));
				horario.setDia(rs.getString("dia"));
				horario.setTurno(rs.getString("turno"));
				horario.setHoraInicial(rs.getTime("horaInicial")); //como faria para adicionar a formatação aqui?
				horario.setHoraFinal(rs.getTime("horaFinal")); //e aqui?
												
				//Adicionando o objeto a lista
				listaHorarios.add(horario);
			}
			rs.close();
			stmt.close();		
	
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}		
		return listaHorarios;		
	}
esdmorais

Cara, o que você acha de trazer a data já formatada do banco?
Isso seria uma boa opção :smiley:
Mas o seu setHora tem que ser String…
Qual é o banco que você está utilizando a aplicação?

Guri.

portugassis

Estou fazendo um teste aqui trabalhando com String, para ver se vai funcionar bem, trabalho com mysql.

esdmorais

Tente isso:

horario.setHoraInicial(new SimpleDateFormat("dd/MM/yyyy").format(rs.getTime("horaInicial")));

E com relação a sua consulta SQL, vou te duas dicas:

  1. Ao invés de colocar o asterisco, coloque os campos que você realmente usará. Isso melhora o desempenho da consulta.
  2. Eu não conheço muito bem MySQL, mas não tem como você fazer os JOINS junto com as tabelas? Aí você não mistura o que é junção de tabelas e o que é filtro de consulta :smiley:

Guri.

Criado 5 de junho de 2011
Ultima resposta 5 de jun. de 2011
Respostas 5
Participantes 2