Problema html:select no STRUTS

Ola,

Estou com o seguinte problema utilizando um html:select no struts.
Quando o usuário efetua o “submit” de um form, o meu action chama um ejb que faz algumas validações, e quando acontece alguma exceção de negócio, eu solicito ao usuário informar novamente determinado campo.
Os campos de texto o STRUTS mantém preenchidos, porém, tenho uma lista “html:select”, que é um atributo e esta configurado no struts-config.xml como java.lang.String[], que volta em BRANCO, ou seja, o STRUTS não esta mantendo o campo preenchido.
Alguém sabe se é um bug do STRUTS, ou se estou fazendo alguma coisa errada ?

Obrigado
Renato.

A sua tag html:select também é formada pela tag html:options certo? Como você está utilizando-a?

No meu projeto utilizamos da seguinte maneira:

[code]<logic:present name=“conjDadosTipoCnsult”>
<html:select property=“pIndTipoCnsultNomTipoDoctoGed” styleClass=“combo” style=“width:110;” styleId=“ComboId1”>
<html:options collection=“conjDadosTipoCnsult” property=“RV_LOW_VALUE” labelProperty=“RV_MEANING” />
</html:select>
</logic:present>

<logic:notPresent name=“conjDadosTipoCnsult”>
<bean:message key=“errors.erroConsulta” arg0=“os filtros para consulta.” />
</logic:notPresent>[/code]

Se existe a estrutura conjDadosTipoCnsult (ArrayList de HashMap) na sessão então “varre” ela e monta a comboBox, senão é exibido uma mensagem de erro já cadastrado em arquivo.

Julianostr,

Na realidade, o meu html:select não é um combo, e sim uma lista, que esta sendo alimentada via javascript, entendeu ? Os dados não vem do banco, esta lista é alimentada por um javascript conforme o usuário informa um outro campo e clica em adicionar, entendeu ? Nesse html:select não tem option, pois estou utilizando ele como se fosse uma lista.

Será que eu tenho que jogar o dado no request ou sessão para depois recupera-lo na página ?

Putz, seria muita gambiarra…

Renato.

Tente fazer o seguinte. Antes de submeter você seta a propriedade selected=true de todas as linhas da sua lista “para forçar” a submissão dos campos.

Depois verifique o conteúdo do seu campo String[] lá na action e veja se as opções selecionadas “na marra” estão dentro do array.

Já fiz isso, pois se os dados não estiverem com selected=true, ele não popula o array de string. Ele esta populando corretamente… porém, quando volta para a tela, volta em branco…

Bom, faz um tempo que não uso Struts, mas vamos lá…
Se pra funcionar o html:select no estilo combobox é necessário utilizar as options, faça isso agora também.

Mantenha a tag html:select, e as tags html:optios você só usa se realmente existir uma estrutura na sessão.

Então, lá na action, antes de dar um forward, você lê o array e cria uma estrutura de ArrayList e salva na sessão.

No jsp você verifica se essa estrutura existe na sessão e usa as tags options que lerão o que você populou. Se você não fizer isso é certo que nada aparecerá por que não tem de onde tirar os valores pois após a submissão, na volta pro JSP, nada está alimentando sua lista na tela.

Exemplo:

<html:select property=“pIndCampo”>
<logic:present name=“conjDadosIndCampo”>
<html:options collection=“conjDadosIndCampo” property=“campo valor” labelProperty=“campo descricao” />
</logic:present>
</html:select>

Aqui o exemplo está na sessão mas acho que você poderia colocar na requisição.

Foi isso que eu entendi. Dá uma estudada aí na tag html:select e veja como usar seus tipos, com certeza alguma coisa é de serventia. E gambiarra e Struts comvivem juntos, já tive que pedalar junto com alguns colegas aqui pra fazer funcionar certas estruturas.

Julianostr,

Valeu, funcionou … o único problema é que tenho que sempre retornar para e mesma página, exibindo a mensagem de erro, pois estou colocando no “request”. Daria para colocar na sessão, o problema é que aí vou ter que ficar controlando …
Mas já resolveu o meu problema !

Obrigado
Renato.