WebWork + ResultSet

Estou iniciando em WebWork e estou com uma dúvida quanto a uma consulta:
1-Tenho uma tela JSP com um formulário onde a pessoa informa um parâmetro para pesquisa
2-Isto é enviado a uma action, que chama a classe que efetua a consulta

  ResultSet query = null;
  conn = Conexao.getConexao();
  // seleciona todos os registros
  String sql = "select * from cidade where nome=?";

  try {
    pstmt = conn.prepareStatement(sql);
    stmt.setString(1,nome_passado)
    query = pstmt.executeQuery();
    if (query.next())
      setRs(query);
  } catch (SQLException sqlex) {
    System.out.println("Erro ao capturar cidades:" + sqlex.getMessage());
  } finally {
    // Conexao.fechaConexao(conn);
  }

Aí vem a pergunta, como eu devo fazer para passar os dados do ResultSet para a página JSP e exibí-los na página JSP???

Coloque os dados no objeto correspondente da tabela do banco, caso seja mais que um utilize uma collection.

Desculpe, mas você poderia me dar um exemplo???

Popule uma List com os objetos retornados do banco, descarte o ResultSet e no JSP pecorra essa List, imprimindo os objetos.

Fiz o seguinte, tenho uma classe Cidade com os métodos gets e sets e uma ADOCidade com este método

public List selCidades() {
  ResultSet query = null;
  conn = Conexao.getConexao();
  List cidades = new ArrayList();

  String sql = "select * from cidade order by nome";
  try {
      pstmt = conn.prepareStatement(sql);
      query = pstmt.executeQuery();
      while (query.next())
      {
        ADOCidade ado = new ADOCidade();
        ado.setId_estado(query.getInt("id_estado"));
        ado.setNome(query.getString("nome"));
        cidades.add(ado);         
      }
      ... fecho o ResultSet e a conexao
  } catch (SQLException sqlex) {
    System.out.println("Erro ao capturar cidades:" + sqlex.getMessage());
  } 
  return cidades;
}

e tenho um JSP que eu gostaria de percorrer este List, mas não está funcionando

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<jsp:useBean id="ado" class="br.com.visualsystems.idm.ADOCidade"/>

<c:forEach var="cidade" items="${ado.selCidades}">
  <c:out value="${cidade.nome}"/>
  <c:out value="${cidade.id_estado}"/>
</c:forEach>

Qual o erro??? E se eu fizer em java, em vez de Taglib como ficaria o código para eu percorrer este list???

Oush, você tá usando webwork ou não?

Popule a list na action e na view (jsp) só pecorra essa list, imprimindo os resultados. Acessar o DAO, no Jsp, quebra totalmente o MVC e faz a utilidade do Webwork ir pras cucuias.

Dá uma olhada nos tutoriais sobre o WW disponíveis aqui no GUJ.

Então, li todos, mas como eles não fazem acesso a banco de dados estou meio perdido

Digamos na seguinte situação

Eu tenho um JSP (formulário) onde é informado o nome do cliente
No action ele direciona para uma classe ActionCliente que eu montei com os gets e sets do Cliente
Eu possuo uma classe que faz o select e monta um List com os dados do RecorSet
E tenho uma classe Cliente apenas com gets e sets

Só para esclarecer

No meu action (utilizo WebWork) ele automaticamente insere os valores nos meus sets, logo, eu precisaria de uma classe Cliente apenas com gets e sets??? Pergunto pois tenho a seguinte situação do ADO popular o objeto cliente e inserir este objeto no List.

Eu chamarei a classe que efetua a consulta de dentro da Action???

Se eu chamar de dentro da Action como eu devolverei o objeto Lista para percorrê-lo em meu JSP???

Pensando desta maneira eu terei o JSP, o Action (com gets e sets), uma classe referente a tabela (com gets e sets) e uma outra classe responsável por maninupar os dados do banco de dados???

Santoro, confuso seu post hehe

public class MyAction extends ActionSupport {
    private List myList;
    public String execute() {
        // popula a lista

        return SUCCESS;
    }

    public List getMyList() {
        return myLIst
    }
}

e com velocity bastaria algo como
#foreach( $obj in $myList )
    <p>$obj.property</p>
#end

[quote=ZehOliveira]Acessar o DAO, no Jsp, quebra totalmente o MVC e faz a utilidade do Webwork ir pras cucuias.
[/quote]

Na Action, que e seu controller, tambem.

Entre a camada de apresentaçao (que corresponde tudo que tem no webwork, struts, etc) e a camada de persistencia deveria ter a…?

pcaldado, não entendi, então onde eu vou acessar o DAO para receber minha lista???

Por que pelo que eu entendi até aqui ficaria assim

JSP envia CONTROLLER
CONTROLLER acessa DAO
CONTROLLER devolve para o JSP

e outra coisa, o que é interessante eu utilizar no JSP, velocity???

Pessoal, não quero ficar atrapalhando vocês, onde eu consigo um exemplo de um JSP que envia os dados para o Controller (WebWork) existe uma consulta no banco de dados e retorna pro JSP???
Aí eu estudo o exemplo

Pergunta: você já brincou bastante só com JSP + Servlets? Caso não, te adianto que vai apenas se irritar tentando aprender um framework.

Aqui um exemplo com Velocity (não lembro mais nada de JSP):

page.vm
&lt;form action="myAction.action"&gt;
    &lt;input type="submit"/&gt;
&lt;/form&gt;

xword.xml
&lt;action name="myAction" class="my.package.MyAction"&gt;
    &lt;result name="success" type="dispatcher"&gt;result.vm&lt;/result&gt;
&lt;/action&gt;

MyAction.java
public class MyAction extends ActionSupport {
    private List data;
    public String execute() {
        MyDAO dao = new MyDAO();

        data = dao.getDataFromDatabase();
    }

    public List getData() {
        return data;
    }
}

result.vm
#foreach( $obj in $data )
    <p>$obj</p>
#end

Ué, agora eu viajei. Tá errado usar DAO na Action?

Modelo? Negócio? :roll:

Tá. E qual o modo mais bunitinho de se buscar uma List em um DAO e jogar no JSP?

Uma pergunta referente a action, nela eu tenho os gets/sets do meu “formulario” e este são automaticamente populados, porém se eu for fazer um insert como ficaria???

digamos que eu tenho uma classe para efetuar o insert/update/delete/select de uma tabela como eu faria para esta classe “ver” os atributos que neste momento estão na Action???

Lipe, por nada neste mundo consegui exibir os dados vindos da Action, já tentei Velocity (conforme vc me passou), Taglibs e nada…

Normalmente eu uso uma camada intermediária entre a Action e o DAO para encapsular regras de negócio de aplicação.

Mas nada impede que voce use a Action para chamar DAO e não tem problema nenhum, a não ser que todas as regras de negócio e controles da sua aplicação estarão na Action.

Aqui na empresa usamos 4 camadas: apresentacao, servico, negocio e integracao

apresentacao: Struts, WebWork…
servico: validações de permissão de usuário a funcionalidade e desligamento da camada de apresentação com o negócio da aplicacao
negócio: regras de negócio e chamada ao DAO
integracao: DAOS e chamadas as persistências (Banco de dados, MainFrame)…

Muito bem, mas você possui os gets/sets nas Actions do WebWork???Como você passa estes valores para a camada de validação???
E quanto ao retorno para a View???