boa tarde pessoal… é o seguinte tenho uma jsp que inclui pessoas… dentro do meu bean eu criei um metodo onde ele cria os botões através do código, certo… até aí funfou tudo blz… mas quando eu coloco o valor da variável btnAction no meu action do h:commandButton dá um erro… as outras variaveis de estilo e valor dá certo… aí vai meu código pra vcs terem uma idéia do que quero fazer;;;
<h:dataTable value="#{pessoa.botao}" var="obj">
<h:column>
<h:commandButton type="submit" action="#{obj.btnAction}" value="#{obj.btnValue}" styleClass="#{obj.btnStyle}"/><br>
</h:column>
</h:dataTable>
meu procedimento no bean
[code]public ListDataModel getBotao() throws Throwable {
List lista;
lista = new ArrayList();
BotaoDTO dto = new BotaoDTO();
dto.setBtnAction("pessoa.incluir");
dto.setBtnStyle("btnok");
dto.setBtnValue("Salvar");
lista.add(dto);
BotaoDTO dtoa = new BotaoDTO();
dtoa.setBtnAction("pessoa.cancelar");
dtoa.setBtnStyle("btncancelar");
dtoa.setBtnValue("Cancelar");
lista.add(dtoa);
return new ListDataModel(lista);
}[/code]
Desde já obrigado pelas dicas…
Até +++
meu erro…
[code]javax.faces.FacesException: #{obj.btnAction}: org.apache.jasper.el.JspMethodNotFoundException: /IncluirPessoa.jsp(63,4) ‘#{obj.btnAction}’ Method not found: br.teste.manterpessoa.BotaoDTO@1a998c7.btnAction()
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110)
javax.faces.component.UICommand.broadcast(UICommand.java:387)
javax.faces.component.UIData.broadcast(UIData.java:926)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:458)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:763)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
br.teste.util.FiltroHibernate.doFilter(FiltroHibernate.java:21)
[/code]
Oi tiagotmr,
O que está acontecendo é que o método que vc está chamando não existe.
action="#{obj.btnAction}"
Vc tem que criar o método btnAction
[quote=maurenginaldo]Oi tiagotmr,
O que está acontecendo é que o método que vc está chamando não existe.
action="#{obj.btnAction}"
Vc tem que criar o método btnAction
[/quote]
olá amigo… como vc pode ver estou criando os meus botões dinamicamente… ou seja na minha jsp só existe uma linha de h:commandButton, concordo que terei que criar um metodo que retorne uma action, mas o problema é como que eu vou saber se ele quer incluir ow cancelar… se não for pedir muito é lógico poderia me postar um exemplo se tiver a solução…
Att
Obrigado…
Por que vc não cria dois botões?
Bom dia… Amigo…
Estou tentando emplementar isso pq terei muitas telas iguais… isso me facilitaria no meu tempo de desenvolvimento… mas na sua opnião acha que isso é possível…
Isso é possível se vc usar binding.
Crie o botão no seu bean como vc está fazendo, dependendo da tela vc cria um inserir, ou cancelar…
No Jsf vc coloca o binding na propriedade:
<h:commandButton binding="#{obj.btnAction}"/>
Aí todo o controle do botão vc faz no seu bean.
[quote=maurenginaldo]Isso é possível se vc usar binding.
Crie o botão no seu bean como vc está fazendo, dependendo da tela vc cria um inserir, ou cancelar…
No Jsf vc coloca o binding na propriedade:
<h:commandButton binding="#{obj.btnAction}"/>
Aí todo o controle do botão vc faz no seu bean.[/quote]
coloquei a propiedade binding="#{obj.btnAction}" e retirei a action=#{obj.btnAction}" ficando a linha assim
<h:dataTable value="#{pessoa.botao}" var="obj">
<h:column>
<h:commandButton binding="#{obj.btnAction}" type="submit" value="#{obj.btnValue}" styleClass="#{obj.btnStyle}"/><br>
</h:column>
</h:dataTable>
deu um erro a executar a página…
javax.servlet.ServletException: javax.servlet.jsp.JspException: org.apache.jasper.el.JspPropertyNotFoundException: /IncluirPessoa.jsp(63,4) ‘#{obj.btnAction}’ Target Unreachable, identifier ‘obj’ resolved to null
meu bean ficou assim…
[code]public ListDataModel getBotao() throws Throwable {
List lista;
lista = new ArrayList();
BotaoDTO dto = new BotaoDTO();
BotaoDTO dtoa = new BotaoDTO();
dto.setBtnAction("#{pessoa.incluir}");
dto.setBtnStyle("btnok");
dto.setBtnValue("Salvar");
lista.add(dto);
dtoa.setBtnAction("loadManter");
dtoa.setBtnStyle("btncancelar");
dtoa.setBtnValue("Cancelar");
lista.add(dtoa);
return new ListDataModel(lista);
}[/code]
Não Tiago,
vc agora tem que criar um objeto do tipo HtmlCommandButton.
private HtmlCommandButton botao:
//Realizar a instancia dele, pode ser no construtor no no método get
//criar os get’s e set’s dele
[quote=maurenginaldo]Não Tiago,
vc agora tem que criar um objeto do tipo HtmlCommandButton.
private HtmlCommandButton botao:
//Realizar a instancia dele, pode ser no construtor no no método get
//criar os get’s e set’s dele[/quote]
maurenginaldo desculpe a ignorancia… mas sou novo nisso… tem como vc me passar como eu faço isso nos detalhes…
Faz o seguinte, até para facilitar nossa discursão:
Faça uma pesquisa primeiro sobre binding, veja alguns exemplos simples, como implementar, seu conceito.
Penso que pode ser a resolução do seu problema.
Depois vc volta ao seu exemplo e discutimos.
Ok, 
[quote=maurenginaldo]Faz o seguinte, até para facilitar nossa discursão:
Faça uma pesquisa primeiro sobre binding, veja alguns exemplos simples, como implementar, seu conceito.
Penso que pode ser a resolução do seu problema.
Depois vc volta ao seu exemplo e discutimos.
Ok,
[/quote]
ok… binding é uma propiedade que eu uso para referenciar o meu componente ao meu bean… agora tenho que atribuir valores para minha action do meu botão… como estou criando os botões dinamicamente acho que tenho que verificar qual o botão foi clicado aí sim executar a ação correta… agora como eu faço isso que é a questao…
Pois é tiago,
a partir do momento que vc usar o binding, vc pode controlar o action no binding.
O binding é o botão, porém dentro das classes java, tudo que vc setar no binding, title, value, action… o botão irá receber igual.