Criando botoes dinamicos... duvida

11 respostas
T

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

public ListDataModel getBotao() throws Throwable {
		List<BotaoDTO> lista;
		lista = new ArrayList<BotaoDTO>();
		
		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);
	}

Desde já obrigado pelas dicas...
Até +++

meu erro...

javax.faces.FacesException: #{obj.btnAction}: org.apache.jasper.el.JspMethodNotFoundException: /IncluirPessoa.jsp(63,4) '#{obj.btnAction}' Method not found: [email removido]()
	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)

11 Respostas

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

T

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

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…

maurenginaldo

Por que vc não cria dois botões?

T

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…

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.

T
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.

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...

public ListDataModel getBotao() throws Throwable {
		List<BotaoDTO> lista;
		lista = new ArrayList<BotaoDTO>();
		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);
	}
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

T

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

maurenginaldo desculpe a ignorancia… mas sou novo nisso… tem como vc me passar como eu faço isso nos detalhes…

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, :slight_smile:

T

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, :slight_smile:

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…

maurenginaldo

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.

Criado 7 de março de 2008
Ultima resposta 10 de mar. de 2008
Respostas 11
Participantes 2