JSF - Componente Dinâmico

Alguém já precisou criar componentes dinâmicos no Java com JSF+PrimeFaces.

Estou precisando criar uma lista de compontes diversos em um <p:panelGrid>

Com consegui criar InputText e InputMask, mas meu problema agora é com o SelectOneMenu. Consigo cria-lo na tela, mas não ei como preencher com uma lista.

Alguém pode me ajudar???
.xhtml

<p:panelGrid binding="#{controller.panel}">
<f:facet name=“header”>
Panel Dinamico
</f:facet>
</p:panelGrid>

Código que cria.


PanelGrid painel = new PanelGrid();
painel.setId("pnlDinamico");
painel.setColumns(2);

SelectOneMenu itxOpcao = new SelectOneMenu();
OutputLabel hotTitulo = (OutputLabel) FacesContext.getCurrentInstance().getApplication().createComponent(OutputLabel.COMPONENT_TYPE); 
hotTitulo.setFor(itxOpcao.getId());

painel.getChildren().add(hotTitulo);
painel.getChildren().add(itxOpcao); 


Bom dia, no inicio eu tentei resolver isso com o selectOneMenu, mas depois achei mais prático utilizar um autoComplete, dá uma olhada:

Na pagina web:

<p:outputLabel for="cidadeAutoComplete" value="Cidade"/>
                    <p:autoComplete id="cidadeAutoComplete"                                                     
                                    value="#{contatoView.contato.endereco.cidade}" 
                                    completeMethod="#{contatoView.getCidadesByLike}"
                                    var="cidade" 
                                    itemLabel="#{cidade.cidade}-#{cidade.uf}" 
                                    itemValue="#{cidade}"
                                    forceSelection="true"/>       

Na classe:

 public List<Cidade> getCidadesByLike(String filtro) {
      return contatoController.getCidadesByLike(filtro);
}

Você aInda vai precisar de um CONVERTER, acredito que o link a seguir pode te ajudar tbm:

http://www.primefaces.org/showcase/ui/input/autoComplete.xhtml

Espero que ajude

Obrigado pelo retorno.
Então, do modo que você disse eu tenho de colocar a tag <p:autoComplete> no xhtml, mas, no meu caso eu preciso criar o componente via código, pois, pode ter muitos porque a origem é uma lista de registros do banco de dados…

Não apareceu antes mas no meu xhtml tenho o componente abaixo:
<p:panelGrid binding="#{pessoaController.panel}"> <f:facet name="header"> Panel Dinamico </f:facet> </p:panelGrid>

E usando o código que postei ele cria na ‘PanelGrid’ o controle, mas o SelectOneMenu não consigo incluir os itens, na verdade não sei nem como fazer isso rs.

Entendi agora, não tinha entendido a parte do “dinâmico”.
Será que compensa mesmo criar o código xhtml à partir do Controller? Bom, eu não tenho muita experiêcia nisso. Mas referente o componente selectOneMenu, se o seu problema é a sintaxe das tags, segue:

        <p:selectOneMenu id="console" value="#{selectOneMenuView.console}" style="width:125px">
            <f:selectItem itemLabel="Select One" itemValue="" />
            <f:selectItem itemLabel="Xbox One" itemValue="Xbox One" />
            <f:selectItem itemLabel="PS4" itemValue="PS4" />
            <f:selectItem itemLabel="Wii U" itemValue="Wii U" />
        </p:selectOneMenu>

DIsponível aqui: http://www.primefaces.org/showcase/ui/input/oneMenu.xhtml

Dá uma lida no showcase do Prime, tem bastante coisa!

Esse é o problema, tem que ser criado via código mesmo.

Porque, os campos são criados através de duas tabelas uma que tem uma lista de itens com tipos (ex.: Texto, Inteiro, data, data e hora, numérico e opção), esse último que é o meu problema, não sei como adicionar itens a ele via código, criar na tela o controle eu consegui agora o resto não.

Segue descrição das tabelas e dados:
Tabelas.
itens_adicionais (id_item_adicional, nome, tipo, ordem)
opcoes_itens_adicionais (id_item_opcao, id_item_adicional, nome, ordem)

Dados nas Tabelas
itens_adicionais (Tipo: 0 inteiro, 1 texto, 2 data, 3 date e hora, 4 opção)
id_item_adicional, nome , tipo, ordem
1 , Inteiro1, 0 , 1
2 , Inteiro2, 0 , 2
3 , Texto1 , 1 , 3
4 , Inteiro3, 0 , 4
5 , Opção1 , 4 , 5
6 , Texto2 , 1 , 6
7 , Opção2 , 4 , 7

opcoes_itens_adicionais
id_item_opcao, id_item_adicional, nome , ordem
1 , 5 , Opção11, 1
2 , 5 , Opção12, 2
3 , 7 , Opção21, 1
4 , 7 , Opção22, 2
5 , 7 , Opção23, 3

Obs.: Tem uma tela que o usuário vai informar isso, então quando abrir por exemplo uma tela de pessoas tem uma aba dados adicionais que lista a primeira tabela para criar os itens na tela e a segunda para preencher os itens dos Combos.
Não tem jeito tem de ser dinâmico. O componente na tela criado manualmente.

To lascado né rs.

Caraca… Entendi o teu propósito, eu já fiz loucuras parecidas em PL/SQL.
Bom amigo, infelizmente meu conhecimento não vai te ajudar muito aí. hehe.

Eu tenho estudado JSF/JPA à partir de alguns livros do Hebert Coelho (http://uaihebert.com/) e tenho conseguido fazer algumas coisas, mas não houve necessidade de fazer nada TÃO dinâmico ainda.

O que precisei fazer (nem tão dinâmico) foi setar propriedades em tempo de execução, ou decidir se um campo será rendered ou não utilizando de operações ternarias. Ou seja, criar componentes inteiros dinamicamente ainda não me surgiu, ainda.

Espero que consiga ajuda. Abraço.