Laço com JSLT

9 respostas
albertoPeppers

Pessoal, boa tarde.

Estou com um problema em uma tela do seu sistema de internações hospitalares. Tenho uma página JSP responsavel pelo cadastro de procedimentos médicos, esse cadastro possui um relacionamento com uma tabela de tipos de procedimentos. Quando eu carrego a tela pela primeira vez consigo selecionar qualquer tipo para o procedimento, mais se eu pesquiso e carrego um procedimento existente no banco só consigo visualizar o tipo que foi cadastrado, impossibilitando assim a alteração. Abaixo esta minha página procedimento.jsp. Gostaria de carregar as opções existentes no banco após a pesquisa.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<link rel="stylesheet" type="text/css" href="modelos/estilo.css">
		<script type="text/javascript" src="modelos/validacao.js"></script>
		<c:if test="${procedimento == null}">
			<script language="javascript">window.location='procedimento.do'</script>
		</c:if>
		<title>SINTHOS - Sistema de Internações Hospitalares</title>
	</head>
	<body>
		<div class="principal">
			<div class="cabecalho"></div>
			<div class="aba">
				<a href="internacao.jsp"><img src="imagens/aba_cadastro1.png" border="0"></a><img src="imagens/aba_cadastro2.png"><a href="relatorios.jsp"><img src="imagens/aba_cadastro3.png" border="0"></a>
			</div>
			<div class="conteudo">
				<center>
					<form name="formProcedimento" id="formProcedimento" method="post" action="procedimento.do">
						<table>
							<tr>
								<td><font color="red">* </font>Código: </td>
								<td><input type="text" lang="1" name="codigo" id="codigo" class="codigo" maxlength="6" onkeypress="return campoNumerico(event)" value="${procedimento.codigoProcedimento }"/></td>
							</tr>
							<tr>
								<td><font color="red">* </font>Descrição: </td>
								<td><textarea lang="1" name="descricao" id="descricao" class="textArea" onkeydown="tamanhoMaximo(this,50)" onchange="this.value=this.value.toUpperCase();">${procedimento.descricao }</textarea></td>
							</tr>
							<tr>
								<td><font color="red">* </font>Valor: </td>
								<td><input type="text" lang="1" name="valor" id="valor" maxlength="9" class="codigo" onkeypress="return campoNumerico(event)" value="${procedimento.valor }"/></td>
							</tr>
							<tr>
								<td><font color="red">* </font>Tipo de Procedimento: </td>
								<td>	
									<select name="tipoProcedimento" id="tipoProcedimento">
										<c:forEach items="${listaTipoProcedimento}" var="tipoProcedimento">
											<option value="${tipoProcedimento.codigoTipoProcedimento }">${tipoProcedimento.descricao }</option>
										</c:forEach>
										<c:if test="${procedimento != null}">
											<option value="${procedimento.tipoProcedimento.codigoTipoProcedimento }">${procedimento.tipoProcedimento.descricao }</option>
											
										</c:if>
									</select>
								</td>
							</tr>
							<tr>
								<td></td>
								<td><font color="red">*</font> Campos Obrigatórios.</td>
							</tr>
						</table>
						<br/>
						<!--<img src="imagens/botaoAnterior.png"> <input type="text" name="navegar" id="navegar" size="4" disabled="disabled"/> <img src="imagens/botaoProximo.png"/>!-->
						<br/>
						<table>
							<tr>
								<td>
									<input type="submit" class="botao" name="acao" value="Salvar" onclick="return validaCampoObrigatorio(formProcedimento)"/>
									<input type="submit" class="botao" name="acao" value="Excluir"/>	
									<input type="submit" class="botao" name="acao" value="Pesquisar"/>
									<input type="submit" class="botao" name="acao" value="Limpar"/>
								</td>
							</tr>
						</table>
					</form>
				</center>
			</div>
			<br/><br/>
			<a href="cadastros.jsp"><img src="imagens/botaoVoltar.png" border="0"/></a> <img align="right" src="imagens/procedimento.png"/> 
			<div class="rodape">Todos os Direitos Reservados - SINTHOS</div>
		</div>
	</body>
</html>

Tentei copiar o laço de cima para dentro da condição mais não funcionou, alguem pode me dar uma dica de como solucionar esse problema. Tambem estou postando o ProcedimentoCTR(Servlet) que controla a tela.

package sinthos.ctr;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sinthos.bean.Procedimento;
import sinthos.bean.TipoProcedimento;
import sinthos.dao.ProcedimentoDAO;
import sinthos.dao.TipoProcedimentoDAO;

 public class ProcedimentoCTR extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;

	public ProcedimentoCTR() {
		super();
	}   	

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//Define o tipo de resposta
		response.setContentType("text/html; charset=iso-8859-1");
		//Cria os objetos e variaveis
		TipoProcedimentoDAO daoTipoProcedimento = new TipoProcedimentoDAO();
		Procedimento procedimento = new Procedimento();
		ProcedimentoDAO daoProcedimento = new ProcedimentoDAO();
		//Envia o  proximo código para tela
		procedimento.setCodigoProcedimento(daoProcedimento.getProcedimentoMaxCodigo());
		request.setAttribute("procedimento", procedimento);
		//Cria lista de tipos de procedimento
		List<TipoProcedimento> listaTipoProcedimento = daoTipoProcedimento.getTodosTipoProcedimento();
		request.setAttribute("listaTipoProcedimento", listaTipoProcedimento);
		//Redireciona para tela
		request.getRequestDispatcher("procedimento.jsp").forward(request, response);
	}  	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//Define o tipo de resposta
		response.setContentType("text/html; charset=iso-8859-1");
		//Cria os objetos e variaveis
		Procedimento procedimento = new Procedimento();
		ProcedimentoDAO daoProcedimento = new ProcedimentoDAO();
		String acao = request.getParameter("acao");
		//Recupera da tela
		procedimento.setCodigoProcedimento(Integer.parseInt(request.getParameter("codigo")));
		procedimento.setDescricao(request.getParameter("descricao"));
		procedimento.setValor(Double.parseDouble(request.getParameter("valor")));
		procedimento.setCodigoTipoProcedimento(Integer.parseInt(request.getParameter("tipoProcedimento")));
		//Ação dos botões da tela
		if(acao.equals("Salvar")){
			procedimento = daoProcedimento.salvarProcedimento(procedimento);
			if(procedimento == null){
				request.getRequestDispatcher("mensagemErro.jsp").forward(request, response);
			}else{
				request.getRequestDispatcher("mensagemOk.jsp").forward(request, response);
			}
		}else if(acao.equals("Excluir")){
			daoProcedimento.excluirProcedimento(procedimento.getCodigoProcedimento());
			request.getRequestDispatcher("mensagemOk.jsp").forward(request, response);
		}else if(acao.equals("Pesquisar")){
			if(procedimento.getDescricao().equals("")){
				procedimento = daoProcedimento.getProcedimentoPorCodigo(procedimento.getCodigoProcedimento());
				request.setAttribute("procedimento", procedimento);
				request.getRequestDispatcher("procedimento.jsp").forward(request, response);
			}else{
				procedimento = daoProcedimento.getProcedimentoPorDescricao(procedimento.getDescricao());
				request.setAttribute("procedimento", procedimento);
				request.getRequestDispatcher("procedimento.jsp").forward(request, response);
			}
		}else{
			request.getRequestDispatcher("procedimento.jsp").forward(request, response);
		}
	}   	  	    
}

Desde de já, muito obrigado.

9 Respostas

wbdsjunior

em palavra simples:

quando você chama a tela de procedimento pela primeira vez, o método doGet() é chamado e este médoto consulta e coloca uma lista de tipos de procedimento na request, que por sua vez é renderizada na página.

quando você pesquisa um procedimento, o método doPost() é chamado (porque você informou que usará o método post para envio do formulário) e este método NÃO consulta e coloca uma lista de tipos de procedimento na request, para que seja renderizada na página.

então, faça a consulta e coloque a lista de procedimentos na resquest:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... List&lt;TipoProcedimento&gt; listaTipoProcedimento = daoTipoProcedimento.getTodosTipoProcedimento(); request.setAttribute("listaTipoProcedimento", listaTipoProcedimento); ... }

sugestão:

crie um método (init() ou coisa assim) com o código repetido nos métodos doGet() e doPost() e substitua o código repetido pelo métoso criado.

albertoPeppers

Cara, fiz o que vc me falou, criei uma lista dentro do método doPost, quando fiz a pesquisa no caso o procedimento 1 tem como tipo (HEMATOLOGICO) quando eu pesquisei ele criou a lista com todos os tipos do banco, duplicou o que já estava cadastrado no procedimento, porem o tipo de procedimento que ja estava cadastrado não veio selecionado.

wbdsjunior

primeiro: você não disse que queria que o tipo fosse selecionado conforme o tipo do procedimento cadastrado.

segundo: o tipo cadastrado é duplicado no combobox porque você o cria de novo fora do laço forEach.

&lt;select name="tipoProcedimento" id="tipoProcedimento"&gt; &lt;c:forEach items="${listaTipoProcedimento}" var="tipoProcedimento"&gt; &lt;option value="${tipoProcedimento.codigoTipoProcedimento }"&gt;${tipoProcedimento.descricao }&lt;/option&gt; &lt;/c:forEach&gt; &lt;c:if test="${procedimento != null}"&gt; &lt;option value="${procedimento.tipoProcedimento.codigoTipoProcedimento }"&gt;${procedimento.tipoProcedimento.descricao }&lt;/option&gt; &lt;!-- aqui você duplica --&gt; &lt;/c:if&gt; &lt;/select&gt;

para manter o tipo cadastrado selecionado na lista, você deve mudar um pouco o teste:

&lt;select name="tipoProcedimento" id="tipoProcedimento"&gt; &lt;c:forEach items="${listaTipoProcedimento}" var="tipoProcedimento"&gt; &lt;option value="${tipoProcedimento.codigoTipoProcedimento }"&gt;&lt;c:if test="${procedimento != null && procedimento.tipoProcedimento.codigoTipoProcedimento == tipoProcedimento.codigoTipoProcedimento}"&gt; checked="checked"&lt;/c:if&gt;&gt;${tipoProcedimento.descricao }&lt;/option&gt; &lt;/c:forEach&gt; &lt;/select&gt;

ou algo assim.

albertoPeppers

Deu certo, ele parou de duplicar o tipo de procedimento cadastrado qnd a lista é carregada…vou dar uma pesquisada pra saber pq ele não está trazendo o tipo cadastrado selecionado, ele até ta na lista, mais não vem selecionado como padrão, tá aparecendo assim no checkbox…

CIRURGICO
checked=“checked” HEMATOLOGICO

wbdsjunior

como ficou o HTML desse SELECT?

albertoPeppers

Desculpe a demora para responder, tive alguns problemas na minha máquina. Bom, o HTML(tela) ficou asssim depois da pesquisa

http://www.albertopontes.xpg.com.br/tela.png

wbdsjunior

albertoPeppers:
Desculpe a demora para responder, tive alguns problemas na minha máquina. Bom, o HTML(tela) ficou asssim depois da pesquisa

http://www.albertopontes.xpg.com.br/tela.png


eu disse o HTML (clicando com o botão direito na página e pedindo para exibir o código-fonte) e não a tela. mas já deu para ter uma idéia.

a tag OPTION ficou mal formada. dê uma olhada no HTML e entenderá.

tente acertar no código-fonte do arquivo jsp.

albertoPeppers

Certo, achei que vc tinha falado da parte visual…vou dar uma olhada na tag , em todo caso vou colocar a resposta da pesquisa em HTML.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<link rel="stylesheet" type="text/css" href="modelos/estilo.css">
		<script type="text/javascript" src="modelos/validacao.js"></script>
		
		<title>SINTHOS - Sistema de Internações Hospitalares</title>

	</head>
	<body>
		<div class="principal">
			<div class="cabecalho"></div>
			<div class="aba">
				<a href="internacao.jsp"><img src="imagens/aba_cadastro1.png" border="0"></a><img src="imagens/aba_cadastro2.png"><a href="relatorios.jsp"><img src="imagens/aba_cadastro3.png" border="0"></a>
			</div>
			<div class="conteudo">
				<center>

					<form name="formProcedimento" id="formProcedimento" method="post" action="procedimento.do">
						<table>
							<tr>
								<td><font color="red">* </font>Código: </td>
								<td><input type="text" lang="1" name="codigo" id="codigo" class="codigo" maxlength="6" onkeypress="return campoNumerico(event)" value="1"/></td>
							</tr>
							<tr>
								<td><font color="red">* </font>Descrição: </td>

								<td><textarea lang="1" name="descricao" id="descricao" class="textArea" onkeydown="tamanhoMaximo(this,50)" onchange="this.value=this.value.toUpperCase();">PROCEDIMENTO 1</textarea></td>
							</tr>
							<tr>
								<td><font color="red">* </font>Valor: </td>
								<td><input type="text" lang="1" name="valor" id="valor" maxlength="9" class="codigo" onkeypress="return campoNumerico(event)" value="1.0"/></td>
							</tr>
							<tr>

								<td><font color="red">* </font>Tipo de Procedimento: </td>
								<td>	
									<select name="tipoProcedimento" id="tipoProcedimento">   
										   
   											<option value="1">
   												
   												CIRURGICO 
   											</option>   
										   
   											<option value="2">
   												 
   													checked="checked"
   												
   												HEMATOLOGICO
   											</option>   
										   
									</select>
								</td>

							</tr>
							<tr>
								<td></td>
								<td><font color="red">*</font> Campos Obrigatórios.</td>
							</tr>
						</table>
						<br/>

						<!--<img src="imagens/botaoAnterior.png"> <input type="text" name="navegar" id="navegar" size="4" disabled="disabled"/> <img src="imagens/botaoProximo.png"/>!-->
						<br/>
						<table>
							<tr>
								<td>
									<input type="submit" class="botao" name="acao" value="Salvar" onclick="return validaCampoObrigatorio(formProcedimento)"/>
									<input type="submit" class="botao" name="acao" value="Excluir"/>	
									<input type="submit" class="botao" name="acao" value="Pesquisar"/>
									<input type="submit" class="botao" name="acao" value="Limpar"/>

								</td>
							</tr>
						</table>
					</form>
				</center>
			</div>
			<br/><br/>
			<a href="cadastros.jsp"><img src="imagens/botaoVoltar.png" border="0"/></a> <img align="right" src="imagens/procedimento.png"/> 
			<div class="rodape">Todos os Direitos Reservados - SINTHOS</div>

		</div>
	</body>
</html>
albertoPeppers

Só fechando o tópico como resolvido.

<select name="tipoProcedimento" id="tipoProcedimento" lang="1"> <c:forEach items="${listaTipoProcedimento}" var="tipoProcedimento"> <option value="${tipoProcedimento.codigoTipoProcedimento }" <c:if test="${procedimento != null && procedimento.tipoProcedimento.codigoTipoProcedimento == tipoProcedimento.codigoTipoProcedimento}">selected</c:if>> ${tipoProcedimento.descricao } </option> </c:forEach> </select>

Criado 18 de fevereiro de 2011
Ultima resposta 10 de mai. de 2011
Respostas 9
Participantes 2