JavaScript e JSF não funciona

To tentando validar um campo pra aceitar somente números em campos JSF e ele não pega o validador, quando coloquei um campo html puro ele funcionou normal.
função pra aceitar só número:

<script type="text/javascript">

	function somenteNumeros(){
		var campo = document.getElementById("formulario:Teste");  
		return campo.replace(/\D/g,"")
   }
		
</script>

meu campo de texto

<a4j:form id="formulario">  
         <h:inputText id="Teste" size="20" onkeypress="somenteNumeros()" value="#{bean.teste}" >
</a4j:form>

com input html eu digito letra e não aparece nada, porque minha função substitui, agora campo jsf ele deixar normal.

Onde estou errando?

<a4j:form id="formulario">  
         <h:inputText id="Teste" size="20" onkeypress="somenteNumeros()" value="#{bean.teste}" >
</a4j:form>

você está pecando no onkeypress tente colocar um return:

<a4j:form id="formulario">  
         <h:inputText id="Teste" size="20" onkeypress="return somenteNumeros()" value="#{bean.teste}" >
</a4j:form>

[quote=markinho] <a4j:form id="formulario"> <h:inputText id="Teste" size="20" onkeypress="somenteNumeros()" value="#{bean.teste}" > </a4j:form>

você está pecando no onkeypress tente colocar um return:

<a4j:form id="formulario">  
         <h:inputText id="Teste" size="20" onkeypress="return somenteNumeros()" value="#{bean.teste}" >
</a4j:form>

[/quote]

não deu diferença, o que está acontecendo desde o início é que ao digitar uma letra, a primeira vez escreve na frente do inputText /\D/g, em vez de ele tentar substituir dentro do input, ele escreve na frente, ou seja, no painel de fora, e partir da segunda tentativa ele já aceita letras normal e nada acontece mais.

Tente :

<script type="text/javascript">

	function somenteNumeros(campo){
		campo.value = campo.value.replace(/\D/g,"")
   }
		
</script>
<a4j:form id="formulario">  
         <h:inputText id="Teste" size="20" onkeypress="somenteNumeros(this)" value="#{bean.teste}" >
</a4j:form>

[]'s
Homero