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.