Bom pessoal,
venho tentando descobrir como fazer isso de uma boa maneira, mas de tanto fuçar, cavar, ler besteira, fazer besteira e etc…
eu já me cansei de soluções de boa prática, e estou aceitando simplesmente soluções práticas.
O que acontece é o seguinte: quero montar um formulário, onde ele terá 2 selects, o primeiro será para escolher o setor de trabalho,
escolhendo esse, o segundo select será populado somente com os funcionarios do setor escolhido.
As soluções que achei foram: <s:doubleselect>, sj:autocompleter com JSON, sj:select e <s:select>
<s:select>
O problema com esse cara foi pelo simples fato dele não ser ajax, ele não notifica os topicos para falar que o formulário deve ser enviado para a action
e assim falar qual o setor escolhido, para a action retornar a lista de funcionarios.
Com esses caras a coisa até funcionou, consegui popular o outro select com os funcionarios certos…o problema é que tive que fazer da seguinte forma:
<s:form id="tramiteOcorrencia" action="demanda!detalharDemanda?demanda.idDemanda=%{demanda.idDemanda}">
<table border="1">
<tr>
<s:form id="listAllBySetor" action="usuario!listAllBySetor">
<sj:autocompleter label="Setor" name="setor.idSetor" id="idsetor" list="listaSetores" listKey="idSetor" selectBox="true" selectBoxIcon="true" listValue="nome" onChangeTopics="submitForm"/>
<sj:submit targets="divUsuarios" cssStyle="display: none;" formIds="listAllBySetor" listenTopics="submitForm"/>
</s:form>
</tr>
<tr>
<td>Usuario: </td>
<td style="padding-left: 8px;">
<sj:div id="divUsuarios"></sj:div>
</td>
</tr>
<tr>
<s:textfield name="acao" size="50" label="Ação"/>
</tr>
<tr>
<s:textarea cols="48" rows="5" name="descricao" label="Descrição"/>
</tr>
<tr>
<s:textfield name="solicitacao" label="Solicitação" size="50"/>
</tr>
<tr>
<sj:submit openDialog="dmdDialog" />
</tr>
</table>
</s:form>
O que acontece?
Eu tive que enviar como formulário, o valor do autocompleter, para uma action…onde ela resgata o id do setor, pega os usuarios do setor, devolve uma pagina jsp que
contém somente um outro autocompleter com a lista de usuarios daquele setor.
Qual o problema disso? Nenhum, tá funcionando…
Só que o problema aparece quando coloco aquelas tags <s:form> englobando o <s:form> que é enviado para atualizar o outro select.
Não sei o que acontece, mas se tiver <s:form> dentro do outro, as actions não funcionam, mesmo se eu definir o formIds.
Só consegui pensar em uma solução: enviar o valor do primeiro select (setor) de forma direta, diretamente na definição da action. O problema é que não faço idéia de como pegar o valor
do primeiro select na propria jsp. No javascript seria: document.getElementById(‘idsetor’).value. Beleza. Mas e na jsp? Dá pra fazer isso com OGNL? Existe uma forma de envio de valores de campos sem ser via send form?
Tentei fazer de forma bem mais simples (aparentemente), usando o esquema do JSON, só que tive problema com objetos agregados, quando ele tentava pegar um objeto que tem objetos
carregados via LazyLoad pelo Hibernate, ele dava um erro violento no JSON, daí eu resolvi mudar de rumo, pelo menos por enquanto.
Por favor, quem tiver um working sample dessa porcaria desses select duplo…me explique como funciona. Já perdi 2 dias nessa brincadeira…=/