Método onchange não chama Servlet

1 resposta
robinsonbsilva

Senhores,

Estou na “luta” de preencher uma combo a partir da seleção de outra e estou seguindo um exemplo simples, mas infelizmente não está rolando ainda. Se eu chamo a Sevlet na mão ele vai, agora pelo método javascript não faz nada e nem dá erro de script. Abaixo segue o código do jsp, da servlet e wex.xml

JSP

<%@ page language="java"%>
<%@ page  import="br.com.unitelco.dto.RangeIpDTO"%>
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/tld/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/tld/displaytag-11.tld" prefix="display"%>
<%
     String action = (String) request.getAttribute("action");
     RangeIpDTO dto = (RangeIpDTO) request.getAttribute("dto");
     String path = request.getContextPath();
     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html:html>
   <head>
      <title>..:: Cadastro de Range de IP's ::..</title>
      <html:base />      
      <link href="css/inscricao_css.css" rel="stylesheet" type="text/css">
      <script language="JavaScript" src="js/global/default.js" type="text/javascript"></script>
      <script language="JavaScript" src="js/local/rangeIp.js" type="text/javascript"></script>

      <base href="<%=basePath%>">  
      
      <meta http-equiv="pragma" content="no-cache">  
      <meta http-equiv="cache-control" content="no-cache">  
      <meta http-equiv="expires" content="0">  
      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
      <meta http-equiv="description" content="This is my page">  
      
      <script language="JavaScript">    

         var tXHR=0;
   
         function XMLHTTPRequest() {  
            if (window.XMLHttpRequest) {   
               a=new XMLHttpRequest(); } //Objeto nativo (FF/Safari/Opera7.6+)  
            else {  
               try {   
                  a=new ActiveXObject("Msxml2.XMLHTTP");  //activeX (IE5.5+/MSXML2+)  
               }     
               catch(e) {  
                  try {   
                     a=new ActiveXObject("Microsoft.XMLHTTP"); //activeX (IE5+/MSXML1)  
                  }     
                  catch(e) { /* O navegador não tem suporte */   
                     a=false;   
                  }  
               }  
            }   
            return a;  
         }  
    
         function atualizaCircuito() {  
            var idPj = document.rangeIpDTO.idPj.options[document.rangeIpDTO.idPj.selectedIndex].value;  
            tXHR=XMLHTTPRequest();  
            if (tXHR) {  
               document.rangeIpDTO.idCircuito.length = 0;  
               document.rangeIpDTO.idCircuito.options[0] = new Option("Aguarde....","");  
               tXHR.open("GET", "/Teste?idPj="+idPj, true);      
               tXHR.onreadystatechange=recebeResultado;  
               tXHR.send(null);  
            }  
         }  
             
         function recebeResultado() {  
            if (!tXHR) {  
               return false;  
            }  
            else {  
               if (tXHR.readyState == 4) {               
                  if (tXHR.status == 200) {  
                     document.getElementById("idCircuito").innerHTML = tXHR.responseText;  
                  }  
                  else {  
                     alert('Erro! "'+ tXHR.statusText +'" (erro '+ tXHR.status +')');   
                  }  
               }      
            }  
         } 

      </script>          
 
      <%if ("doClose".equals(action)) {%>
      <script language="JavaScript" type="text/javascript">
         parent.opener.parent.grid.location = '<%=request.getContextPath()%>/rangeIp.do?method=selectAll';
         window.close();
      </script>
      <%}%>      

   </head>  
   
   <div id="pagina">
      
      <!-- Início do formulário-->
      &lt;div id="formulario"&gt; <img   >
         
         &lt;h1&gt;Cadastro de Range&lt;/h1&gt;
         
         &lt;html:form action="/rangeIp.do?method=doConfirm" focus="idPj"&gt;
            &lt;input name="action" id="action" type="hidden" value="&lt;%=action%&gt;" &gt; 
            &lt;input name="idRangeIp" id="idRangeIp" type="hidden" value='&lt;bean:write name="dto" property="idRangeIp"/&gt;'&gt;
            &lt;fieldset&gt;
               
               &lt;label for="Cliente"&gt;&lt;strong&gt;*&lt;/strong&gt;Cliente<br>
                  &lt;html:select property="idPj" value='${dto.pj.idPj}'&gt;  
                     &lt;html:option value="-1"&gt;Selecione uma opção&lt;/html:option&gt;
                     &lt;html:options collection="listPjs" property="idPj" labelProperty="nomeFantasia"/&gt;
                  &lt;/html:select&gt;  
               &lt;/label&gt;
               <br >
               
               &lt;label for="Circuito"&gt;&lt;strong&gt;*&lt;/strong&gt;Circuito:<br>
                  &lt;html:select property="idCircuito" value='${dto.circuito.idCircuito}' onchange="atualizaCircuito()"&gt; 
                     &lt;html:option value="-1"&gt;Selecione uma opção&lt;/html:option&gt;
                     &lt;html:options collection="listCircuitos" property="idCircuito" labelProperty="designacao"/&gt;
                  &lt;/html:select&gt;  
               &lt;/label&gt;
               <br >
               
               &lt;label for="Repetidora"&gt;&lt;strong&gt;*&lt;/strong&gt;Repetidora:<br>
                  &lt;html:select property="idPonto" value='${dto.repetidora.idPonto}'&gt; 
                     &lt;html:option value="-1"&gt;Selecione uma opção&lt;/html:option&gt;
                     &lt;html:options collection="listRepetidoras" property="idPonto" labelProperty="descricao"/&gt;  
                  &lt;/html:select&gt;  
               &lt;/label&gt;
               <br >
               
               &lt;label for="Rede"&gt;&lt;strong&gt;*&lt;/strong&gt;Rede<br>
                  &lt;input name="rede" id="rede" size="30" maxlength="15" type="text" value='&lt;bean:write name="dto" property="rede"/&gt;'/&gt;
               &lt;/label&gt;
               <br >
               
               &lt;label for="Tamanho"&gt;&lt;strong&gt;*&lt;/strong&gt;Tamanho<br>
                  &lt;html:select property="tamanho" value='${dto.tamanho}'&gt; 
                     &lt;html:option value="/20"&gt;/20&lt;/html:option&gt;
                     &lt;html:option value="/21"&gt;/21&lt;/html:option&gt;
                     &lt;html:option value="/22"&gt;/22&lt;/html:option&gt;
                     &lt;html:option value="/23"&gt;/23&lt;/html:option&gt;
                     &lt;html:option value="/24"&gt;/24&lt;/html:option&gt;
                     &lt;html:option value="/25"&gt;/25&lt;/html:option&gt;
                     &lt;html:option value="/26"&gt;/26&lt;/html:option&gt;
                     &lt;html:option value="/27"&gt;/27&lt;/html:option&gt;
                     &lt;html:option value="/28"&gt;/28&lt;/html:option&gt;
                     &lt;html:option value="/29"&gt;/29&lt;/html:option&gt;
                     &lt;html:option value="/30"&gt;/30&lt;/html:option&gt;
                  &lt;/html:select&gt;  
               &lt;/label&gt;
               <br >               
               
               &lt;label for="Data"&gt;&lt;strong&gt;*&lt;/strong&gt;Data Ínicio<br>
                  &lt;input name="dataInicio" id="dataInicio" size="15" maxlength="10" type="text" value='&lt;bean:write name="dto" property="dataInicio"/&gt;'/&gt;
               &lt;/label&gt;
               <br >
               
            &lt;/fieldset&gt;   
            <p> 
               &lt;html:submit value="Gravar" styleClass="botao"/&gt; | 
               &lt;html:cancel value="Cancelar" styleClass="botao" onclick="window.close()" /&gt;         
            </p>
         &lt;/html:form&gt;
      &lt;/div&gt;
   &lt;/div&gt;
&lt;/html:html&gt;

SERVLET

package br.com.unitelco.utils;

import br.com.unitelco.bdo.CircuitoBDO;
import br.com.unitelco.dto.CircuitoDTO;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Teste extends HttpServlet {

   private static final long serialVersionUID = 1L;

   public Teste() {
      super();
   }

   public void destroy() {
      super.destroy(); // Just puts "destroy" string in log  
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      response.setContentType("text/html");
      StringBuffer retorno = new StringBuffer("");

      PrintWriter out = response.getWriter();
      out.println("&lt;select name=\"idCircuito\"&gt;");

      try {
         ArrayList rows = (ArrayList) CircuitoBDO.selectAll(request);
         for (CircuitoDTO circuito : (ArrayList&lt;CircuitoDTO&gt;) rows){
            retorno.append("&lt;option value=\"" + circuito.getIdCircuito() + "\"&gt;" + circuito.getDesignacao() + "&lt;/option&gt;\n");
         }
      } catch (Exception e) {
         request.setAttribute("erro", e.getMessage());
      }

      out.println(retorno);
      out.println("&lt;/select&gt;");
      out.flush();
      out.close();

   }

   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println("&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"&gt;");
      out.println("&lt;HTML&gt;");
      out.println("  &lt;HEAD&gt;&lt;TITLE&gt;A Servlet&lt;/TITLE&gt;&lt;/HEAD&gt;");
      out.println("  &lt;BODY&gt;");
      out.print("    This is ");
      out.print(this.getClass());
      out.println(", using the POST method");
      out.println("  &lt;/BODY&gt;");
      out.println("&lt;/HTML&gt;");
      out.flush();
      out.close();
   }

   public void init() throws ServletException {
   }
}

Web.xml

&lt;servlet&gt;
        &lt;servlet-name&gt;Teste&lt;/servlet-name&gt;
        &lt;servlet-class&gt;br.com.unitelco.utils.Teste&lt;/servlet-class&gt;
    &lt;/servlet&gt;

    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;Teste&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/Teste&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;

1 Resposta

otaviofcs

Bom, não sei se estou necessariamente te ajudando, mas use um framework de javascript para facilitar a sua vida, já que você não parece saber tanto de javascript (o que é razoável e nem eu sei tanto assim).

  1. isso aqui
document.rangeIpDTO.idPj

tá retornando alguma coisa? Eu nao vi definição que seu form teria o nome rangeIpDTO. Manda um

window.alert(document.rangeIpDTO.idPj); window.alert(document.rangeIpDTO.idPj.selectedIndex);
para ver o que te retorna (seria null?)

use o FF para validar seu javascript, é mais rápido. Use o plugin do webdeveloper…

abraços,

otávio

Criado 16 de junho de 2008
Ultima resposta 16 de jun. de 2008
Respostas 1
Participantes 2