[Dúvida Struts]Propriedade collection da tag options

12 respostas
Alder

Olá galera, bom dia, boa tarde, boa noite, minha dúvida é a seguinte estou no meio de um projeto que usa Struts 1, e preciso criar uma jsp, com uma combobox, um botão e uma tabela para exibição de dados.
Essa combobox vai listar alguns nomes e ao clicar no botão será feita uma pesquisa no banco para exibir na tabela todos os registros relacionados ao nome selecionado. E é exatamente a combobox que eu não consigo criar, estou setando as propriedades desta maneira:

<html:form action="/admCorretora.do" method="POST">
            <html:select property="corretora" name="CorretoraForm">
                <html:option value="">TODAS</html:option>
                <html:options collection="corretoras" property="corretora" />
            </html:select>           
</html:form>

Explicando mais ou menos “corretora” no caso é o objeto da classe Corretora que possui o nome para ser exibido na combobox e os outros dados para serem exibidos na tabela, “corretoras” no caso é a lista - private List corretoras = new ArrayList(); - de corretoras. Os dois atributos pertecem à classe CorretoraForm.
Quando tento executar, gera uma exceção:

javax.servlet.jsp.JspException: Cannot find bean under name corretoras

Como eu seto esta propriedade corretamente?

Bom galera e aqui está o código da action:

<action path="/admCorretora" name="CorretoraForm" scope="request" 
                parameter="acao" type="br.com.attps.cma.cef.pld.struts.action.CorretoraAction" >
            <forward path="/relatorios-gerenciais/administracaodecorretoras.jsp" name="success" />
</action>

Lembrando que não uso persistência.
Agradeço a ajuda de todos desde já.

12 Respostas

mduques

Tem certeza que a colecao ‘corretoras’ existe?

<html:select property=“corretora” >
<html:option value="">TODAS</html:option>
<logic:present name=“corretoras” >
<html:options collection=“corretoras” property=“corretora” labelProperty=“nomeCorretora” />
</logic:present>

</html:select>

Alder

Opa, ela existe sim kra. Mas houve umas mudanças no código. Agora Existe uma classe CorretoraDAO para o banco de dados, e não estou conseguindo recuperar o nome de todas as corretoras da tabela para dentro da combobox. Se puder me ajudar agradeço…Abraços. Vou tentar especificar melhor. Agora existe uma tabela Corretora com os dados de várias corretoras, nessa combobox eu preciso recuperar todos os Nomes de todas as corretoras, sendo assim ela tem q ser dinâmica. Na classe Form exite um objeto corretoras - private List corretoras = new ArrayList(); - que é uma lista das Corretoras. Minha dúvida é como eu faço pra recuperar os nomes e exibi-los na combobox? No caso eu teria que criar um método que faça uma pesquisa no banco e retorne somente o nome?Se for isso como seto este método na combobox? Lembro que existe um método select na classe CorretoraDAO, porém retorna todos os dados. Bom, agradeço a atenção de todos novamente. E já ia me esquecendo ao redor da combobox existe esta tag html:form:

<html:form  action="/admCorretora.do" method="POST">

E aqui de novo o código da action:

<action path="/admCorretora" name="CorretoraForm" scope="request" 
                parameter="acao" type="br.com.attps.cma.cef.pld.struts.action.CorretoraAction" >
            <forward path="/relatorios-gerenciais/administracaodecorretoras.jsp" name="success" />
</action>
lgmhorus

Esse problema ocorre normalmente em duas situações. A mais provavel é que o objeto não esteja colocado na sessão corretamente. Outra possibilidade é que tem alguma linha com valor de corretora é nulo. Tenta esse código do mduques. Se der certo, você provavelmente está na primeira situação. Se continuar dando este erro, tenta fazer isso:

<html:select property="corretora" >
   <html:option value="">TODAS</html:option>
   <logic:present name="corretoras" property="corretora">
      <html:options collection="corretoras" property="corretora" labelProperty="nomeCorretora" />
   </logic:present>
</html:select>

ou

<html:select property="corretora" >
   <html:option value="">TODAS</html:option>
   <logic:present name="corretoras" property="nomeCorretora">
      <html:options collection="corretoras" property="corretora" labelProperty="nomeCorretora" />
   </logic:present>
</html:select>

Desta forma você verifica se os dados estão corretos na sessão e sem valores nulos.

Alder

Ok lgmhorus, vou tentar o que vocês disseram e posto o resultado. Mas eu tinha esquecido de dizer não gera erro mais…Agora simplesmente não mostra os dados na combo, eu não estou conseguindo pega-los do banco. Mas vou tentando aqui, e quando conseguir aviso. Abraços e agradeço a boa vontade.

Alder

lgmhorus testei as suas duas formas também e não deu certo. Mas valeu assim mesmo, abraços.

lgmhorus

Alder, posta aqui o código de onde você está colocando estes dados na sessão para ver.

Alder

Ok, bom, eu estou colocando a action como request, onde eu teria que setar os dados como sessão?
Este é o código da action no struts-config.xml:

<!--Action Corretoras-->
<action path="/admCorretora" name="CorretoraForm" scope="request" 
            parameter="acao" type="br.com.attps.cma.cef.pld.struts.action.CorretoraAction" >
            <forward path="/relatorios-gerenciais/administracaodecorretoras.jsp" name="success" />
</action>

Agora, o código da classe form:

...
//A classe Corretora possui os dados, como nome, etc.
private Corretora corretora = new Corretora();
private List<Corretora> corretoras = new ArrayList<Corretora>();
...

O código da jsp:

...
<html:form  action="/admCorretora.do" method="POST">
<html:select property="corretora" >   
                       <html:option value="">TODAS</html:option>   
                       <logic:present name="corretoras" property="nomeCorretora">   
                           <html:options collection="corretoras" property="corretora" labelProperty="nomeCorretora" />   
                       </logic:present>   
</html:select>
</html:form>

Estava agora pensando se poderia ser algum erro no driver jdbc, porém se estivesse chegando no driver a exceção seria lançada, então mesmo que no driver ocorra algum erro a pesquisa não está chegando à ele. Me corrija se estiver errado.
Enfim, acho que é isso, agradeço novamente a boa vontade. Abaço.

lgmhorus

Na action antes dessa tela, tem que ter algo do tipo

List<Corretora> corretoras = new ArrayList<Corretora>();  
//Gera o array de corretoras
request.getSession.setAttribute("corretoras",corretoras);
Alder

Não entendi direito, é pra colocar essas linhas no método que é chamado quando a página é carregada???

lgmhorus

Normalmente, antes de chamar esta página, é chamado um Action, correto? Se sim, este código deve vir nesta Action.

Alder

Kra…tipo assim…se eu postar o código completo de todas as classes que na minha opnião são importantes será mais fácil?Hoje eu li em um fórum não me lembro qual mas era dos EUA, um problema parecido que a solução foi ao invés de usar lista, usar vector, mas não deu também…E eu agradeço muito a boa vontade de vocês…Abraços

V

Amigo, faz como o pessoal disse acima. No teu action que redireciona pra tua página coloca a tua collection na sessão
req.getSession().setAttribute(“corretoras”, corretoras);
funciona que é uma blza… :slight_smile:

Criado 1 de julho de 2008
Ultima resposta 1 de dez. de 2008
Respostas 12
Participantes 4