Ajuda com DWR

Olá,

Estou fazendo uma tela onde devo buscar o nome de prestadores de serviço e exibir com autopreenchimento de combo box.
Baixei o dwr, testei buscando somente o nome e funcionou (uma lista somente com strings). Porém, preciso buscar nome e código, então alterei o código para setar na lista o objeto prestadorTO, que possui o código e o nome do prestador.

Estou com problemas ao tentar exibir os dados depois que comecei setar os objetos na lista.

Abaixo posto meu código:

dwr.xml

<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
    "http://getahead.org/dwr/dwr20.dtd">

<dwr>
  <allow>
    <create creator="new" javascript="PrestadorService">
      <param name="class" value="com.teste.prestador.PrestadorService"/>
      <include method="buscaPrestadorPorNome"/>
      <convert converter="bean" match="com.teste.prestador.PrestadorTO"/> 
    </create>
  </allow>  
</dwr>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
      <servlet-name>dwr-invoker</servlet-name>
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
      <init-param>
         <param-name>debug</param-name>
         <param-value>true</param-value>
      </init-param>
    </servlet>
    <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>/jsp/index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

PrestadorTO

package com.teste.prestador;

public class PrestadorTO {
    
    /** Código do Prestador (Médico) */
    private String cdPrestador;
    /** Nome do Prestador (Médico) */
    private String nomePrestador;

    public String getCdPrestador() {
        return cdPrestador;
    }

    public void setCdPrestador(String cdPrestador) {
        this.cdPrestador = cdPrestador;
    }

    public String getNomePrestador() {
        return nomePrestador;
    }

    public void setNomePrestador(String nomePrestador) {
        this.nomePrestador = nomePrestador;
    }

}

PrestadorService.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.teste.prestador;

import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author mariane
 */
public class PrestadorService {
    
    /**
     * @author  Mariane 
     * @date    08/01/2008
     * @version 1.0
     * 
     * @param nome Nome do Prestador
     * 
     * @return listaPrestadores Lista de Prestadores
     * 
     * @description
     * Busca em vs_especialidade_endereco todos os prestadores cadastrados
     */
    public List<PrestadorTO> buscaPrestadorPorNome(String nome){
        List<PrestadorTO> listaPrestadores = new ArrayList();
        PrestadorDAO prestadorDao = new PrestadorDAO();
        
        listaPrestadores = prestadorDao.buscaPrestadorPorNome(nome);

        return listaPrestadores;
    }//buscaPrestadorPorNome    
}

CadastrarVisita.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<head>
    <script language="JavaScript" src="js/calendar1.js"></script>
    <script language="JavaScript" src="js/calendar2.js"></script>

    <script type='text/javascript' src='dwr/interface/PrestadorService.js'></script>
    <script type='text/javascript' src='dwr/engine.js'></script>
    <script type='text/javascript' src='dwr/util.js'></script>    

    <style type="text/css">
        body { font-family: arial; font-size: 12px; }
        div { padding-top: 10px;  }
    </style>

    <script>
        function $(id) {
                return document.getElementById(id);
        }

        function buscaPrestador(nome) {
            PrestadorService.buscaPrestadorPorNome(nome.toLowerCase(), preencheResultados);             
        }

        function preencheResultados(nomes) {   
            var data = "";   

            data += "<select name='medicoSelect' id='teste' size=4>"
            for (var i = 0; i < nomes.length; i++) {   
                data += "<option value='javascript:seleciona(\"" + nomes[i].nomePrestador + "\")' onclick='setaParametros(\"" + nomes[i].nomePrestador + "\", \"" + nomes[i].cdPrestador + "\")'>" + nomes[i].nomePrestador;
            }   
            data += "</select>";

            $("resultados").innerHTML = data;   
        } 
        
        function seleciona(nome) {
                $("dtVisitaTxt").value = nome;
        }
        
        function setaParametros(nome, codigo) {
                document.CadastraVisita.medicoTxt.value = nome;
                document.CadastraVisita.codMedico.value = codigo;
                document.CadastraVisita.medicoSelect.style.visibility='hidden';
        }        
    </script>
</head>

<html>
<jsp:include page="cabecalho.jsp" flush="true" />
<body onLoad="MM_reloadPage(true); MM_preloadImages('imagens/site/estrutura_btn_cadastrarvisita2.jpg','imagens/site/estrutura_btn_consultavisita2.jpg','imagens/site/estrutura_btn_pesquisa2.jpg','imagens/site/estrutura_btn_sair2.jpg')">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    &lt;td align="center" valign="top"&gt;<br>
      &lt;table border="0" cellpadding="0" cellspacing="0" width="778"&gt;
      &lt;jsp:include page="topo_pagina.jsp" flush="true" /&gt;
      &lt;tr&gt;
        &lt;td align="left" style="padding:20px; vertical-align:top; background-color:#FFFFFF;"&gt;
          &lt;form name="CadastraVisita" method="post" action="CadastraVisitaServlet"&gt;
          &lt;input type="hidden" name="action"&gt;
          &lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt;
            &lt;tr&gt;
              &lt;td align="left" style="width:50%"&gt;
               &lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt;
                  &lt;tr&gt;
                    &lt;td style="width:40px"&gt;
                        <img   >
                    &lt;/td&gt;
                    &lt;td class="arial22verdeEsc" style="width:478px"&gt;Cadastrar Visita&lt;/td&gt;
                    &lt;td align="right" class="arial22verdeEsc" style="width:220px"&gt;
                        &lt;table width="4%" height="51" border="0" cellpadding="0" cellspacing="0" class="bordasimplesbranca"&gt;
                          &lt;tr&gt;
                            &lt;td align="right" valign="middle" class="arial12verdeEsc" style="width:14%"&gt;
                                <a  >
                                    <img  >
                                </a>
                            &lt;/td&gt;
                          &lt;/tr&gt;
                        &lt;/table&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                &lt;/table&gt;
              &lt;/td&gt;
            &lt;/tr&gt;
            &lt;c:if test="${mensagem != null && mensagem != ''}"&gt;
            &lt;tr&gt;
                &lt;td align="center" style="font-family:arial; font-size:13px; color:#009900; font-weight:bold;"&gt;
                    &lt;c:out value="${mensagem}"/&gt;
                &lt;/td&gt;
            &lt;/tr&gt;    
            &lt;tr&gt;
                &lt;td&gt;&nbsp;&nbsp;&lt;/td&gt;
            &lt;/tr&gt;                
            &lt;/c:if&gt;
            &lt;tr&gt;
              &lt;td align="center"&gt;&lt;table width="100%" cellpadding="0" cellspacing="0" class="bordasimples"&gt;
                  &lt;tr&gt;
                    &lt;td align="left" class="arial12verdeEsc" style="width:131px; height:33px;"&gt;Data da Visita: &lt;/td&gt;
                    &lt;td align="left" class="arial12cinzaEsc" style="width:605px; height:30px;"&gt;
                        &lt;input type="text" name="dtVisitaTxt" value="&lt;c:out value='${dtVisitaTxt}'/&gt;" id="dtVisitaTxt" readonly="true" onClick="call.popup();"&gt;
                        &nbsp;&nbsp;
                        <a >
                            <img   >
                        </a>                        
                    &lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;tr&gt;
                    &lt;td align="left" class="arial12verdeEsc" style="height:33px;"&gt;Nome Médico:&lt;/td&gt;
                    &lt;td align="left" class="arial12cinzaEsc"&gt;
                        &lt;input type="text" name="medicoTxt" id="medicoTxt" class="caixa3" size="63" onKeyUp="buscaPrestador(this.value)"&gt;
                        &lt;input type="hidden" name="codMedico" id="codMedicoId"&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;                  
                  &lt;tr&gt;
                    &lt;td align="left" class="arial12verdeEsc" style="height:33px;"&gt;Especialidade:&lt;/td&gt;
                    &lt;td align="left" class="arial12cinzaEsc"&gt;
                        &lt;select name="especialidade" class="caixa3"&gt;
                            &lt;option value=""&gt;&nbsp;&lt;/option&gt;
                             &lt;c:forEach var="esp" items="${listaEspecialidades}"&gt;
                                &lt;option value="${esp.codEspp}" ${(especialidade) == (esp.codEspp) ? 'selected':''}&gt;&lt;c:out value="${esp.descricaoEspp}"/&gt;&lt;/option&gt;		
                            &lt;/c:forEach&gt;
	         &lt;/select&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;tr&gt;
                    &lt;td colspan="2" align="center" class="fundoTituloPesquisa" style="height:35px;"&gt;
                        &lt;span class="arial18azul"&gt;Pesquisa&lt;/span&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;tr&gt;
                    &lt;td colspan="2" align="left" class="arial12verdeEsc" style="height:80px;"&gt;
                      &lt;table width="100%" border="0" cellpadding="0" cellspacing="0" class="bordasimplesbranca"&gt;
                        &lt;tr&gt;
                          &lt;td class="arial12verdeEsc"&gt;4 - Quais ve&iacute;culos de comunica&ccedil;&atilde;o que utiliza para obter as informa&ccedil;&otilde;es?&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                          &lt;td&gt;&lt;span class="arial12cinzaEsc"&gt;
                            &lt;select name="comunicacao" class="caixa3"&gt;
                              &lt;option&gt; &lt;/option&gt;
                              &lt;c:forEach var="com" items="${listaComunicacao}"&gt;
                                &lt;option value="${com.cdComunicacao}" ${(comunicacao) == (com.cdComunicacao) ? 'selected':''}&gt;&lt;c:out value="${com.txComunicacao}"/&gt;&lt;/option&gt;
                              &lt;/c:forEach&gt;
                            &lt;/select&gt;
                          &lt;/span&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                     &lt;/table&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;tr&gt;
                    &lt;td colspan="2" align="left" class="arial12verdeEsc" style="height:80px;"&gt;
                      &lt;table width="100%" border="0" cellpadding="0" cellspacing="0" class="bordasimplesbranca"&gt;
                        &lt;tr&gt;
                          &lt;td class="arial12verdeEsc"&gt;7 - Sugest&otilde;es&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                          &lt;td&gt;&lt;label&gt;
                                  &lt;textarea name="sugestoes" cols="138" rows="5" class="caixa3"&gt;&lt;c:out value="${sugestoes}"/&gt;&lt;/textarea&gt;
                          &lt;/label&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                      &lt;/table&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;tr&gt;
                    &lt;td colspan="2" align="left" class="arial12verdeEsc" style="height:80px;"&gt;
                      &lt;table width="100%" border="0" cellpadding="0" cellspacing="0" class="bordasimplesbranca"&gt;
                        &lt;tr&gt;
                          &lt;td class="arial12verdeEsc"&gt;8 - Elogios&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                          &lt;td&gt;&lt;textarea name="elogios" cols="138" rows="5" class="caixa3"&gt;&lt;c:out value="${elogios}"/&gt;&lt;/textarea&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                      &lt;/table&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;tr&gt;
                    &lt;td colspan="2" align="left" class="arial12verdeEsc" style="height:80px;"&gt;
                      &lt;table width="100%" border="0" cellpadding="0" cellspacing="0" class="bordasimplesbranca"&gt;
                        &lt;tr&gt;
                          &lt;td class="arial12verdeEsc"&gt;9 - N&atilde;o-conformidades&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                          &lt;td&gt;&lt;textarea name="naoConformidade" cols="138" rows="5" class="caixa3"&gt;&lt;c:out value="${naoConformidade}"/&gt;&lt;/textarea&gt;&lt;/td&gt;
                        &lt;/tr&gt;
                      &lt;/table&gt;
                    &lt;/td&gt;
                  &lt;/tr&gt;
                &lt;/table&gt;
                  &lt;table width="100%" height="51" border="0" cellpadding="0" cellspacing="0" class="bordasimplesbranca"&gt;
                    &lt;tr&gt;
                      &lt;td align="left" valign="middle" class="arial12verdeEsc" style="width:86%"&gt;
                          <a >
                            <img  >
                          </a>
                      &lt;/td&gt;
                      &lt;td align="right" valign="middle" class="arial12verdeEsc" style="width:14%"&gt;
                          <a  >                          
                            <img  >
                          </a>
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/table&gt;
                <p>&nbsp;</p>&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/table&gt;
         &lt;/form&gt;
        &lt;/td&gt;
        &lt;td&gt;
            <img   />
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;jsp:include page="rodape.jsp" flush="true" /&gt;
    &lt;/table&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;script language="javaScript"&gt;
     // specify form element as the only parameter (document.forms['formname'].elements['inputname']);
     // note: you can have as many calendar objects as you need for your application
    var call = new calendar1(CadastraVisita.dtVisitaTxt);
    call.year_scroll = true;
    call.time_comp = false;
&lt;/script&gt;

Já testei a busca no banco de dados e está funcionando corretamente.
Na realidade, não estou conseguindo exibir os dados da lista com objetos PrestadorTO no jsp.
Será que alguém pode me ajudar?

Obrigada,
Mariane

Meu velho, o DWR vem com um DwrUtil que é um JS que ja irá fazer a limpeza do combo, como seu preenchimento de forma automatica pra você.
Observe tambem o que esta retornando no service, o DWR ele tem um link que irá permitir a você testar todas as funções da Service que você quer expor ao JavaScript, de uma olhada com calma no site.

Lembre que você irá retornar um Objeto Java tranformado em javascript então ser prestador.codigo, prestador.nome como você irá trabalhar.

Olá afamorim,

Então o jsp que fiz está errado?
Será que você poderia postar um exemplo de como ficaria? Estou perdida.
Dei uma olhada dentro do dwr.jar e não vi o dwrUtil. É lá mesmo que ele deveria ficar?

Obrigada,
Mariane

Ola Mariane,

olhando o site do DWR vi que mudaram mesmo, não é mais DWRUtil não, agora é util.js http://getahead.org/dwr/browser/util, na pagina de download você pode baixar o DWR.war que tem varios exemplo, nessa url mesmo http://getahead.org/dwr/browser/lists, mostra examante o que você quer fazer.

Infelizmente estou sem o codigo disponivel no momento, pois fiz na ultima empresa em que trabalhei.

pelo war deles da p/ ser uma boa ideia do que se tem que fazer.

qualquer coisa pode perguntar que ajudarei na medida do possivel
ps: procure documentacao de objetos em javascript, pois funcionam muito bem com a integração que o dwr faz com o java.

Olá afamorim,

Dei uma olhada no link que você postou.
Alterei a função javascript “preencheResultados(nomes)” original.
A função alterada ficou assim:

        function preencheResultados(nomes) {  
            dwr.util.addOptions( "medicoSelect", nomes, cdPrestador, nomePrestador); 

        }

cdPrestador e nomePrestador eu tentei com aspas e sem aspas, mas nenhum dos 2 jeitos funcionou.
Quando mando rodar o programa dá o seguinte erro: “cdPrestador is not defined”.

Você sabe me dizer o que estou fazendo de errado?

Obrigada pela ajuda,
Mariane

Esse nomes é o objeto??
tem que ser
de uma lida sobre objetos em javascript, só assim você vai conseguir usar bem o DWR.