Ola pessoas , estou com um problema aqui, gostaria de construir um SelectOneMenu com o SelectItens e um InputText DINAMICAMENTE.
Bom eu até consegui criar exibir na tela renderizado e tals , estou usando setValue para associa com o atributo do meu bean, porem não esta funcionando, alguem poderia me dar uma ajuda, segue meu cogigo abaixo.
Estou fazendo com inputText bem simples soh para ver se funciona, mais não esta funcionando
alguem sabe porque?
E
erickfm8
Pessoal não estou conseguindo mesmo coloquei, criei este tópico 6ªfeira 11/06/2010, mais ja fora 5 dias e não consegui resolver, alguem por favor poderia me ajugar,agradeço a todos que estão me ajudando
V
vi-gb
Posta como esta seu bean e sua pagina pra eu ver.
E
erickfm8
Meu bean
publicclassMbPessoa{privateClassclassePessoa;privatePessoapessoa;privateHtmlFormformulario;privateHtmlPanelGridpainel;privateHtmlPanelGridpainelPrincipal;privateList<String>pessoas;privateList<String>pessoasSelecionadas;privateList<String>operadores;privateList<String>operadoresSelecionados;privateList<String>valoresFiltro;privateStringfiltroTeste;privateHtmlInputTextitxOperador;publicMbPessoa(){try{this.setClassePessoa(Class.forName("dominio.Pessoa"));}catch(ClassNotFoundExceptionex){Logger.getLogger(MbPessoa.class.getName()).log(Level.SEVERE,null,ex);}this.setPessoasSelecionadas(newArrayList<String>());this.setOperadoresSelecionados(newArrayList<String>());this.setValoresFiltro(newArrayList<String>());this.setPessoa(newPessoa());this.criarComponentes();}privatevoidcriarComponentes(){this.setPainel(newHtmlPanelGrid());this.getPainel().setColumns(2);HtmlOutputTexthotTitulo=(HtmlOutputText)FacesContext.getCurrentInstance().getApplication().createComponent(HtmlOutputText.COMPONENT_TYPE);hotTitulo.setValue("Configuração do Relatório de Pessoas");FacesContextcontext=FacesContext.getCurrentInstance();ELContextelContext=context.getELContext();Applicationapp=context.getApplication();ExpressionFactoryexpressionFactory=app.getExpressionFactory();ValueExpressionve=expressionFactory.createValueExpression("#{mbPessoa.filtroTeste}",String.class);//ValueBinding vb = app.createValueBinding("#{filtroTeste}");itxOperador=newHtmlInputText();//vb.setValue(context, vb.getValue(context));itxOperador.setValueExpression("e",ve);//itxOperador.setValueBinding("e", vb);this.getPainel().getChildren().add(itxOperador);}}
Agora meu jsf
<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><h:head><title>Configurar Relatório de Pessoas</title></h:head><h:body><h:formbinding="#{mbPessoa.formulario}"><h:panelGridcolumns="2"><h:selectManyCheckboxid="listaPessoasSelecionadas"value="#{mbPessoa.pessoasSelecionadas}"layout="pageDirection"><f:selectItemsitemValue="#{pes}"var="pes"value="#{mbPessoa.pessoas}"/></h:selectManyCheckbox><h:panelGridbinding="#{mbPessoa.painel}"columns="2"></h:panelGrid></h:panelGrid></h:form></h:body></html>
Bom pessoal queria tambem complementar, se eu criar o componente com o ExpressionValue do jeito que estou criando e criar o mesmo componente na tela e usar o binding, ai vai funcionar, mais o problema é que eu não sei quantos componentes eu vou criar, pois vai ser determinado por outro fator então tenho que criar todos esse componentes no codigo java dinamico.
Obrigado
V
vi-gb
Acho que esta faltando o metodo get e set do painel para que a pagina consiga acessa-lo nao é?
E
erickfm8
vi gb , muito obrigado por ajudar, então é que não postei os gets e sets, mais segue aki abaixo, estão todos completos
acho que não seria isto o porblema eu acho que o problema está mais relacionado ao que eu falei,
Se eu colocar este InputText na tela e ligar ele pelo binding com o input do meu mbPessoa,ai funciona, porem não quero fazer isto, ai gera minha duvida
Tem algum jeito de fazer o biding no java? ou melhor tem outra forma de fazer isto funcionar?
V
vi-gb
Ola, qual a mensagem de erro que aparece? Rodei aqui e o inputtext aparece normal. Me explique melhor como deveria funcionar a pagina.
E
erickfm8
Então não aparece erro nenhum ele apenas não passa o valor que você digitar no atributo do bean no caso o “filtroTeste”
se vc tentar acessar este atributo ele vai estar null
V
vi-gb
É pq em momento nenhum vc da um submit, vc nao tem um botao para enviar esta informacao, e nem definiiu um evento (onkeyup, onkeypress, etc) com uma ação (reRender por exemplo) entende?
Vou tentar montar um exemplo aqui e depois envio.
Se voce utiliza richfaces, da uma pesquisada no a4j:support com ele vc define eventos e acoes para um componente.
Caso contrario da uma pesquisada sobre eventos javasccript tipo onkeyup e como dar submit por ele.
que chama o metodo gerarRelatorio ai neste metodo eu dou um System.out.println no atributo, mais ele esta null , é que não postei ele para não ficar muito codigo, desculpe me,
por ser so um exemplo estou usando apenas jsf
quero agradecer por estar me ajudando
Obrigado
V
vi-gb
Tenta mudar esta linha pra ver se vai:
itxOperador.setValueExpression("value", ve);
era ‘e’ e eu coloquei ‘value’, veja se funciona
E
erickfm8
troquei pra value, mesmo assim não funcionou, você chegou testar ai?
Obrigado
V
vi-gb
Testei sim, q estranho veja o metodo como esta:
privatevoidcriarComponentes(){this.setPainel(newHtmlPanelGrid());this.getPainel().setColumns(2);HtmlOutputTexthotTitulo=(HtmlOutputText)FacesContext.getCurrentInstance().getApplication().createComponent(HtmlOutputText.COMPONENT_TYPE);hotTitulo.setValue("Configuração do Relatório de Pessoas");FacesContextcontext=FacesContext.getCurrentInstance();ELContextelContext=context.getELContext();Applicationapp=context.getApplication();ExpressionFactoryexpressionFactory=app.getExpressionFactory();ValueExpressionve=expressionFactory.createValueExpression(elContext,"#{mbPessoa.filtroTeste}",String.class);itxOperador=newHtmlInputText();itxOperador.setValueExpression("value",ve);this.getPainel().getChildren().add(itxOperador);}
E
erickfm8
ENTÃO, teste aki e não funciona, tbm pq mudar pra value?
O engraçado e que se eu criar o componente na tela e usar o binding ai ele funciona
V
vi-gb
Repassando o codigo vi que esta linha tbm esta diferente:
ValueExpression ve = expressionFactory.createValueExpression(elContext,
"#{mbPessoa.filtroTeste}", String.class);
To passando o contexto tbm, tente.
E
erickfm8
privatevoidcriarComponentes(){this.setPainel(newHtmlPanelGrid());this.getPainel().setColumns(2);HtmlOutputTexthotTitulo=(HtmlOutputText)FacesContext.getCurrentInstance().getApplication().createComponent(HtmlOutputText.COMPONENT_TYPE);hotTitulo.setValue("Configuração do Relatório de Pessoas");this.setFormulario(newHtmlForm());FacesContextcontext=FacesContext.getCurrentInstance();ELContextelContext=context.getELContext();Applicationapp=context.getApplication();ExpressionFactoryexpressionFactory=app.getExpressionFactory();ValueExpressionve=expressionFactory.createValueExpression(elContext,"#{mbPessoa.filtroTeste}",String.class);//ValueBinding vb = app.createValueBinding("#{filtroTeste}");itxOperador=newHtmlInputText();//vb.setValue(context, vb.getValue(context));itxOperador.setValueExpression("value",ve);//itxOperador.setValueBinding("value", vb);//itxOperador.setValue(this.getFiltroTeste());this.getPainel().getChildren().add(itxOperador);// this.getFormulario().getChildren().add(this.getPainel());}
meu código ta exatamente assim, mudei pra add o contexto tbm, mais não funciona,vc fez alguma coisa de mais no xml(jsf)?
Obrigado
E
erickfm8
voce imprimi o atributo e aparace o conteudo?
V
vi-gb
Nao mudei mais nada, coloquei um sysout no gerarRelatorio e aparece oq eu digitei.
E
erickfm8
Muito obrigado pela ajuda, infelismente, continua o problema …
E
erickfm8
so para desencargo de consciencia posta seu jsf page pra mim.
V
vi-gb
<?xml version='1.0' encoding='iso-8859-1' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><body><f:view><h:formbinding="#{mbPessoa.formulario}"><h:panelGridcolumns="2"><h:selectManyCheckboxid="listaPessoasSelecionadas"value="#{mbPessoa.pessoasSelecionadas}"layout="pageDirection"><f:selectItemsitemValue="#{pes}"var="pes"value="#{mbPessoa.pessoas}"/></h:selectManyCheckbox><h:panelGridbinding="#{mbPessoa.painel}"columns="2"></h:panelGrid><h:commandButtonvalue="Gera relatorio"actionListener="#{mbPessoa.gerarRelatorio}"/></h:panelGrid></h:form></f:view></body></html>
E
erickfm8
Não funcionou…
E
erickfm8
Pessoal consegui resolver, peguei meu componente e atribui um id para ele, exmplo itxOperador.setId(“idItx”)
Obrigado a todos que me ajudou
D
dealver
erickfm8 você poderia postar seu código completo por favor? O método criarComponente está no seu bean??? Não estou conseguindo fazer.
Desde já eu agradeço.
E
erickfm8
então isso foi ah mais de dois anos…
não tenho mais o codigo…
qual o problema q vc esta tendo?
A
ale0790
bom dia.
Então galera, talvez com isso seja possível solucionar meu problema, o que eu pretendo fazer é o seguinte, tenho um site que é um agregador de links, eu gostaria de disponibilizar um codigo aos meus usuarios que ele renderizasse no site dos meus usuarios os melhores links do dia com um limite de links escolhidos pelo usuario… é possível fazer isso ??