ActionListener não é chamado pelo commandButton

10 respostas
R

Bom, estou utilizando o commandButton do Primefaces para achamar um ActionListener no meu ManagedBean, mas ele simplesmente não é chamado e não mostra nenhum erro, nada.

Veja meu commandButton

<p:commandButton id="deleteItem" icon="ui-icon-minus" update=":formCadastrar:dataTableItens" 
					action="#{tabelaProcedimentoMB.deleteItem}" type="button" />

Veja meu actionListener

public void deleteItem(ActionEvent event){
		if (selectedItem != null){
			itens.remove(selectedItem);
			addInfoMessage("Item deletado com sucesso");
		}else{
			addErrorMessage("Selecione um item para remover");
		}
	}

10 Respostas

S

eu tive esse mesmo problema com o prime faces essa semana,mas meu problema era do ajax,resolvi deixando de usar ajax na minha aplicação…

R

E como faço para desabilitar o AJAX da minha aplicação ? E em que pode implicar isso na minha aplicação ?

S

ue cara,tu usa ajax quando tu define em um inputText os atributos rendered e update como @all , @self, entre outros,se tu não chamar o ajax simplesmente você vai deixar de usar ele o.o
mas você já deve ter resolvido isso ai…

R

Obrigado Slow17, mas ainda não resolvi o problema não, a actionListener não é chamada de jeito nenhum.

S

no metodo que o actionListner vai executar,tenta dar um sendRedirect para a nova pagina,se tiver que mudar alguma coisa na propria pagina com ajax
ai meu filho e com você mesmo

FacesContext fc = FacesContext.getCurrentInstance(); ExternalContext ec = fc.getExternalContext(); ec.redirect("pagina que você vai mandar depois de executar esse metodo");

R

Não entendi o motivo do sendRedirect, pois bem, se ele for apenas para ter certeza que o actionListener está sendo chamado, não há necessidade pois já depurei o código e ele não é chamado mesmo.

S

Não é não, se você ja usou servlet já deve ter notado a diferença entre o foward e redirect,o foward serve para você passar para outra pagina passando parametros
no request,porém é como se você continuasse na pagina antiga e na pagina nova ao mesmo,se você der um F5 em uma pagina que foi exibida depois de um foward ela vai executar o servlet denovo,e actionListner do jsf faz a troca de paginas desse modo,semana passada tive problemas porque eu queria editar uma tabela de um dataTable,eu clicava para editar ,ele ia para formulario,porém quando eu submitava o formulario,o mesmo não era executado,o action dele não funcionava,e não exibia erro nenhum,isso porque é como se ele continuasse na pagina anterior que é a lista me estava dando algum conflito entre o dataTable e formulario,minha solução foi trocar foward que o jsf usa como padrão para redirect que redireciona totalmente para a proxima pagina,e os parametros eu tive que passar pela sessão mesmo…
detalhe que nem é o actionListner que faz a troca,é o action do commandButtom/link

aqui o topico que eu criei por causa desse problema semana passada
http://www.guj.com.br/java/304392-resolvido-jsf2primefaces-e-ajax–problemas-de-execucao-de-metodos

R

Mas meu caro, a função do meu ActionListener é apenas remover 1 item de um List, não quero que mude para nenhuma outra página.

S
de boa brow,então tenta fazer isso aqui na tag do dataTable
selection="#{seuBean.suaLista que vai remover}" var="coisas" rowKey="#{coisas.id}"
e crie esta coluna na dataTable
&lt;p:column  selectionMode="multiple"&gt; 
        &lt;/p:column&gt;

crie essa lista no teu MB

List&lt;SuaClasse&gt; listaRemocao;

e faça o seguinte metodo

public void remove(){
	try{
		
		for(SuaClasse obj : listaRemocao){
			EntityManager manager = this.getManager();
			FuncionarioRepositoryImpl repository = new FuncionarioRepositoryImpl(manager);
			repository.remove(obj);
		}
		FacesContext fc = FacesContext.getCurrentInstance();
		ExternalContext ec = fc.getExternalContext();
		ec.redirect("tela de remocao.xhtml");
	}catch(Exception e){
			e.printStackTrace();
		}
	}
adapta ai para o seu *detalhe,falta ai o botao que vai chmar o metodo deletar mas esse botao voce já entao....
S

.

Criado 8 de setembro de 2013
Ultima resposta 9 de set. de 2013
Respostas 10
Participantes 2