JSF - acionando o click de botão via JavaScript

Bom dia,

Sou iniciante em JSF e estou tendo problemas ao executar o click de um botão atráves de javascript. O meu problema é que o método do meu managedBean é chamada 2 vezes. Quando eu clico diretamente no botão o método é chamado uma única vez, mas através da função do javascript o método é chamado 2 vezes.

O que estou tentando fazer é de um campo quando o usuário pressionar o “Enter” executar o click de um botão. Uma coisa que percebi é que mesmo sem colocar o onkeypress no campo h:inputText o método do meu ManagedBean é chamado.

Qualquer ajuda será muito bem vinda!!!

Segue o meu código:

Página:



<h:outputLabel value="${msgs.ean}:" style=“text-align:left;”/>


<h:inputText id=“ean” value="#{cadastroDUN14.ean}" size=“14” onkeypress=“verificarEnter(this, event);”
required=“true” requiredMessage="${msgs[‘campo.obrigatorio’]}" tabindex=“0”>
</h:inputText>


<h:commandButton id=“consEAN” value="…" action="#{cadastroDUN14.consultarEAN}"/>
			</tr>

Função do js:

function verificarEnter(myfield,e)
{
var keycode;

if (window.event) { 
	keycode = window.event.keyCode;
} else if (e) { 
	keycode = e.which;
} else {
	return true;
}

if (keycode == 13 && myfield.name == "dunForm:ean") {
	document.getElementById('dunForm:consEAN').click();
	return false; 
	
} else if (keycode == 13 && myfield.name == "dunForm:dun14"){
	document.getElementById('dunForm:salvar').click();
	return false; 
	
} else {
	return true;
}

}

ManagedBean:
/**

  • Método para consultar o produtor pelo código EAN.

*/
public String consultarEAN(){
… Código …
return “”
}

drcosta,

uma dica: se você olhar o código fonte no browser, perceberá que o seu botão já tem javascript embutido no onclick, mesmo que você não coloque nada, por isso quando você coloca um keyup no seu commandLink ou commandButton, o clique continua valendo e chamando o método no seu bean.

Voce precisa adicionar uma funcao javascript que possa retornar false para que o click nao funcione.

A forma de trabalhar com javascript no jsf é diferente de actionlike frameworks.

Outra dica: de uma estudada em como funciona o ciclo de vida do jsf.

Obrigado sawamu