Campos Dinâmicos JSF

11 respostas
Gerson_da_S_Lima

Olá pessoal!!

Meu problema:

Tenho uma listas com etapas de um processo, e pra cada etapa dessa tenho outra lista de executores dessa etapa, que são campos combobox.

A idéia é, pra cada etapa de um processo selecionar um executor, só que o número de etapas varia de processo para processo, por isso a necessidade da montagem desses campos ser dinâmica.

Alguém pode me ajudar a como setar esse valores no bean.

11 Respostas

Gerson_da_S_Lima

Eu tava pensando em utilizar parâmetros (hidden), como a gente faz com jsp. Vai ficar meio ruinzinho, mas acho que dá pra fazer, mas continuo esperando alguma dica.

D

Gerson tem como vc montar campos dinamicos utilizando BINDING.
Enquanto a settar esses valores no bean, vc pode criar um list que recebe todos os valores digitados nos campos dinamicos. Depois vc pode quebrar esses valores e tratar cada um de forma diferente (Conforme a necessidade do negocio).

M

Eu não entendi muito bem o que você precisa, veja se é isso.

Você tem uma lista de etapas de processos e pra cada etapa você tem um combo com os executores e você quer selecionar um executor pra cada etapa.

Bom, se for o que eu to pensando porque você não preenche o bean conforme o processo selecionado?

Gerson_da_S_Lima

markin1 é exatamente isso, a questão é que essas etapas variam de processo para processo, e eu tenho só uma tela que executa qualquer etapa, de um processo, e nela eu preciso montar a lista de etapas e o trazer os possíveis executores das mesmas para que sejam selecionados.

É uma lista com listas.

diegorc85, eu nunca fiz nada com binding, não que eu saiba pelo menos, vou dar uma pesquisada pra vê se me ajuda.

corrigindo diego, já usei sim, só não sabia que se chamava assim, kkkk!

Obrigado pela ajuda, e por favor continuem ajudando.

M

Então homi, nessa tela você tem uma lista de processos certo? Antes de qualquer coisa você vai precisar selecionar um processo? Se sim popula o próximo componente após a seleção desse primeiro componente, Entendeu?

Gerson_da_S_Lima

markin1, você ainda não entendeu, vou explicar melhor o problema.

O sistema que estou trabalhando é um tipo de sistema de workflow. Então, temos vários fluxos, e cada instância de um fluxo é um processo, cada fluxo tem diversas etapas, que são diferentes para cada processo.

Então, esses fluxos podem ser cadastrados a qualquer momento no banco, com suas respectivas etapas e etc.

Então, em uma jsp é a página principal de execução de cada etapa do fluxo, então, dependendo da etapa eu posso selecionar os executores das próximas, por isso, não dá pra fixar um número de campos, precisa ser dinâmico.

Deu pra clarear mais?

M

Hmmmm… agora eu acho que entendi, então a etapa você quer gerar um formulário dinâmico com vários campos?

Entendi dessa vez? :smiley:

Gerson_da_S_Lima

É isso, só que por enquanto os campos dinâmicos são somente os executores das etapas, mais ou menos assim:

digamos que tem um processo com cinco etapas, a elaboração e mais quatro, então quando o usuário abrir a tela de elaboração vai aparecer quatro combos pra ele selecionar o executor pra cada etapa.

Só que pode haver um outro processo que tem um número de etapas diferentes, então vai aparecer um número de combos diferentes, e assim por diante.

O grande problema é que não posso ter uma página pra cada processo, tudo tem que ser em uma só página (dinâmico).

M

Os componentes do form dinâmico sempre serão combos?

Gerson_da_S_Lima

por enquanto sim, nós ainda não estamos nos preocupando com a implementação de regras de negócio, só com a questão do fluxo.

Gerson_da_S_Lima

Bem pessoal, como ainda não obtive sucesso, vou postar o que já consegui, mas continuo precisando de ajuda.

Pra montar os campos dinêmicamente eu fiz o seguinte, criei uma classe que representa cada linha do campo, mais ou menos assim

public class LinhaExecutor {
          private Integer colaboradorSelecionado;
          private Etapa etapa;
          private List<SelectItem> executores;


          //Contrutor, getters and setters
}

Como podem ver, tem uma atributo etapa, que corresponde a cada etapa que cada campo vai representar, um atributo executores, que setá a lista dos executores, e um atributo colaboradorSelecionado, onde eu esperava setar o id do executor selecionado no combo, só que não deu certo.

No meu bean eu tenho uma lista de LinhaExecutor, assim:

List<LinhaExecutor> listaExecutores;

Eu preencho essa lista e consigo exibir as etapas e os combos extamente como eu quero, só não consegui pegar o id do colaborador selecionado. Segue o código da jsp:

<rich:dataTable var="linha" value="#{beanExecucaoFluxo.linhasExecutores}" rendered="#{beanExecucaoFluxo.renderedDesignarExecutor}">
         <rich:column>
                  <h:outputText value="Executor #{linha.etapa.descricao}: " />
         </rich:column>
         <rich:column>
                  <h:selectOneMenu value="#{linha.colaboradorSelecionado}"> <% // Aqui eu tentei setar o calaborador selecionado, mas não deu certo%>
                           <f:selectItem itemValue="" itemLabel="-- Selecione um Executor --"/>
                           <f:selectItems value="#{linha.executores}"/>
                  </h:selectOneMenu>
          </rich:column>
</rich:dataTable>

Então se alguém puder dá uma luz…

Criado 4 de janeiro de 2010
Ultima resposta 5 de jan. de 2010
Respostas 11
Participantes 3