Preencher combobox - Struts Action ou Servlet

Pessoal,

Estou querendo preencher uma combobox com valores salvos no BD, andei pesquisando e vi que algumas pessoas fazem uma nova Action do Struts(que eu uso) chamando o metodo de listagem do DAO e depois colocam essa lista em request.setAttribute("uf",teste.getEstados());, vi algumas pessoas fazendo parecido com Servlet. A minha dúvida é: como colocar a lista que irei conseguir através do DAO em varios arquivos jsps?
Se for em uma Action do Struts, por exemplo, eu vou fazer essa linha acima e depois da um retorno, esse retorno vai estar no meu struts-config.xml e ira me redirecionar para alguma jsp, onde irei colocar os valores na combo, mas eu vou ter varios jsps que irao ter combo de estado, por exemplo, e precisarei preencher varias vzs essa combo, mas como fazer preencher varias combos varias vezes, vou ter que fazer diversas Actions ou diversos Servlets?
Deu pra entender?

brother, pelo que entendi você quer pegar essas informações do banco e poder utilizar em qualquer parte do projeto, certo?
Se realmente for dessa forma, você pode jogar os valores do combo que você pegou do combo em sessão:

request.getSession().setAttribute("uf", teste.getEstados());

ah e depois para pegar, só pegar da sessão

request.getSession().getAttribute("uf");

Assim não precisa pegar os valores do banco várias vezes… :lol:

É isso mesmo, quero pegar do banco e usar varias vezes, sem precisar ficar criando varios arquivos nem acessando direto o BD, já tinha pensado em sessao, mas essa eh a melhor ou a unica saida? Nao vai pesar meu sistema nao? Nao tem nenhuma implicação negativa?
Outra dúvida é: posso fazer isso com uma Action do Struts certo? Mas como e onde executá-la para criar essa lista?

na verdade aqui na empresa também utilizamos o struts, e fazemos desta forma, não conheço alguma maneira de fazer isso no struts, acredito que nem exista também, então acho que o melhor é jogar na sessão, na verdade iria ficar pior se você tivesse que buscar várias vezes no banco o processamente seria maior…

Com certeza, ficar acessando o Bd direto é pior do que deixar na sessao, posso até fazer isso, mas você diz para eu criar a lista através de uma servlet ou de uma ação do Struts? Como chamar a servlet ou a ação antes de mostrar o jsp? Essa agora é minha dúvida.

Para pegar a lista, depende da estrutura da tua aplicação, podes ter um metodo que faça a consulta no BD e jogar esse valor para sessão diretamente, dentro da action mesmo, ou em alguns casos se a tiveres mais de uma camada, vai ter que “caminhar” por entre essas camadas para acessar o banco e depois jogar em session

Vou fazer dentro de um Action mesmo, mas comom executá-la? Em algum lugar vou ter que colocar listaEstados.do, por exemplo, mas onde? Pois ao clicar em Cadastrar, por exemplo, abre direto o jsp, nao tem como eu colocar a action vinculada ao link, nao sei onde posso coloca-la? Tem como executar uma action sem vincula-la a cliques, links, forms, ou algo do tipo?

Velho, te aconselho a criar uma action para chamar o metodo que acessa o BD, um exemplo(tosco) abaixo.hehehe:

//Action aqui...
  public ActionForward execute( ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response 
{

//Acessa o BD aqui e joga em session...

 request.getSession().setAttribute("uf", teste.getEstados());  

//aqui retorna "sucesso" se caso tudo deu certo
  return mapping.findForward("sucesso");
	     
}
Agora lá no seu struts-config, no mapeamento dessa sua action, quando ele(seu mapeamento) receber a mensagem "sucesso" ele irá direcionar o conteúdo da sua lista para o jsp

Entao eu dou o forward no meu xml para um jsp qualquer que eu precise dessa lista, por exemplo, depois eu vou acessar pela sessao, quando precisar de novo, em outro form e outro jsp, nao vou precisar desse forward, só da sessao mesmo né?
Mas seu eu criar uma nova action e chamar o metodo da minha DAO pra listar do BD, nao vou precisar chamar essa action alguma vez? Pra ela listar e depois passar pro meu jsp? Basta eu criar a action, listar, jogar na sessao e pronto, nao tenho q em algum momento chama-la?

Em struts você vai utilizar o struts-config.xml, não o web.xml que usaria se estivesse utilizando servlets:E você precisara setar os dados em session apenas uma vez, quando voce precisar de outro form não precisara fazer isso novamente,pode ficar tranquilo. Basta você criar a action, listar na sessão e não tera que chama-lá novamente. Isso mesmo brother.!! :lol:

Eu sei que criando a lista na sessao nao vou precisar chama-la mais, a minha dúvida é: nao basta eu criar a action, listar os estados dentro dela e dar o forward, em algum momento eu vou ter que chamar essa action, em algum momento vou ter que executar o listarEstados.do, ou não? Nao sei como executar essa action, entendeu? Até sei, posso colocar num submit, num link, etc., o problema é que eu ja chamo varias actions quando estou precisando dessa lista, nao sei se tem como essa action funcionar automaticamente, sem a necessidade de estar num action de um form ou no onclik de um button, ou num link, sei la

É, pelo que conheço, não tem como você chamar automaticamente, você terá que chamar a sua listarEstados.do de alguma forma. Ou você poderia chamar automaticamente no seu web.xml, aí seria automático, mas acho que seria meio cambiarra.

 <!-- The Usual Welcome File List -->
  <welcome-file-list>
    <welcome-file>/WEB-INF/pages/istarEstados</welcome-file>
  </welcome-file-list>

Ah tah, entendi, eh ja estou fazendo algumas cambiarras, é melhor tentar de outro jeito. Vou ver aqui, vou achar uma saida.
Só mais uma coisa: o exemplo que me deu acima pra acessar a asessao é usando scriplets, como fazer com taglib?
Eu fiz assim e nao esta funcionando:

<c:forEach var="uf" items="${listaEstados}"> <option value="${uf.codigo}">${uf.nome}</option> </c:forEach>

terás que fazer assim:

 <c:forEach var="uf" items="${listaEstados}">  
  <html:select>
  <html:option  value="${uf.codigo}">${uf.nome}</html:option >                                  
</html:select>
</c:forEach> 

Não precisa utilizar scriptles para pegar atributos da sessão, podes utilizar o items="${listaEstados}", como esta utilizando, ele é inteligente a ponto de saber que está em session :lol:

Fiz isso, mas nao listou nada, acho que nao deve estar trazendo do BD direito, muito estranho, mas valeu mesmo.

faça um teste antes de jogar em sessão…
pode até ser um

System.out.println(listaEstados.size());

só para ver se realmente está vindo do banco

faça um teste antes de jogar em sessão…
pode até ser um

 System.out.println(listaEstados.size());  

só para ver se realmente está vindo do banco