Teclado Virtual Primefaces capturar foco componente

Pessoal, estou tentando montar um componente para ser um teclado virtual, sendo assim, as minhas telas irão implementar esse componente e conforme clicado nos botões, irá preencher os inputtext. Mas nesta tela, tenho vários inputtext, e eu preciso saber para qual input vou enviar os dados do teclado virtual.

Não estou conseguindo encontrar nada para capturar qual input está com foco. Lembrando que, não sei o nome deste input, pois cada tela tem nomes variados.
Minha dúvida é como capturar o input que está com foco, e enviar para ele os valores do teclado virtual.
O teclado virtual foi feito com commandButton do primefaces 2.2.

Teclado:

   	<ui:define name="body">
   	
            <p:panel id="display" header="Teclado" style="margin-top:10px;">    
                <br/>    
                &lt;h:inputText id="campo" value="#{teclado.campo}"/&gt;
                &lt;h:inputText id="campo1" value="#{teclado.campo2}"/&gt;
            &lt;/p:panel&gt;    
            &lt;p:panel&gt;    
                &lt;p:commandButton value="7" action="#{teclado.preencher('7')}" update="bodyForm:display"/&gt;    
                &lt;p:commandButton value="8" action="#{teclado.preencher('8')}" update="bodyForm:display"/&gt;    
                &lt;p:commandButton value="9" action="#{teclado.preencher('9')}" update="bodyForm:display"/&gt;

...

Bean:

@ManagedBean(name = "teclado")
@SessionScoped
public class Teclado {

	private String campo;
	private String campo2;

	public String getCampo() {
		return campo;
	}

	public void setCampo(String campo) {
		this.campo = campo;
	}
	
	public String getCampo2() {
		return campo2;
	}

	public void setCampo2(String campo2) {
		this.campo2 = campo2;
	}

	public void preencher(String campo) {  
	       this.campo += campo;  
	} 

Neste caso, estou preenchendo apenas o um campo, mas preciso de algo genérico, pois saberei o nome do campo somente quando capturar quem está com o foco.

Ve se isso te ajuda.

&lt;h:form id="bodyForm"&gt; &lt;p:panel id="display" header="Teclado" style="margin-top:10px;"&gt; <br/> &lt;h:inputText id="campo" value="#{teclado.campo}"/&gt; &lt;h:inputText id="campo1" value="#{teclado.campo1}"/&gt; &lt;/p:panel&gt; &lt;p:panel&gt; &lt;p:commandButton value="7" action="#{teclado.preencher('7','campo')}" update="bodyForm:display"/&gt; &lt;p:commandButton value="8" action="#{teclado.preencher('8','campo')}" update="bodyForm:display"/&gt; &lt;p:commandButton value="9" action="#{teclado.preencher('9','campo')}" update="bodyForm:display"/&gt; <br/> &lt;p:button value="4"/&gt; &lt;p:button value="5"/&gt; &lt;p:button value="6"/&gt; <br/> &lt;p:button value="1"/&gt; &lt;p:button value="2"/&gt; &lt;p:button value="3"/&gt; <br/> &lt;p:button value="Limpa"/&gt; &lt;p:button value="0"/&gt; &lt;p:button value=","/&gt; &lt;/p:panel&gt; &lt;p:panel&gt; &lt;p:commandButton value="7" action="#{teclado.preencher('7','campo1')}" update="bodyForm:display"/&gt; &lt;p:commandButton value="8" action="#{teclado.preencher('8','campo1')}" update="bodyForm:display"/&gt; &lt;p:commandButton value="9" action="#{teclado.preencher('9','campo1')}" update="bodyForm:display"/&gt; <br/> &lt;p:button value="4"/&gt; &lt;p:button value="5"/&gt; &lt;p:button value="6"/&gt; <br/> &lt;p:button value="1"/&gt; &lt;p:button value="2"/&gt; &lt;p:button value="3"/&gt; <br/> &lt;p:button value="Limpa"/&gt; &lt;p:button value="0"/&gt; &lt;p:button value=","/&gt; &lt;/p:panel&gt; &lt;/h:form&gt;[code] private String campo;
private String campo1;

public String getCampo1() {
    return campo1;
}

public void setCampo1(String campo1) {
    this.campo1 = campo1;
}

public String getCampo() {
    return campo;
}

public void setCampo(String campo) {
    this.campo = campo;
}

public void preencher(String valor, String campo) {

    Method metodoSet = null;
    Method metodoGet = null;
    try {
        metodoSet = this.getClass().getMethod("set" + toInitCap(campo), String.class);
        metodoGet = this.getClass().getMethod("get" + toInitCap(campo));
    } catch (NoSuchMethodException | SecurityException ex) {
        Logger.getLogger(Teclado.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
        System.out.println(metodoGet.invoke(this, new Object[]{}));
        metodoSet.invoke(this, metodoGet.invoke(this) + valor);
    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException illegalAccessException) {
    }
}

public String toInitCap(String valor) {
    return valor.substring(0, 1).toUpperCase() + valor.substring(1);
}[/code]

AmauriSpPoa, O meu problema é que não sei o id do campo, pois estou montando um componente.
Neste caso, eu preciso capturar o id do campo que está com o foco, e a partir dai capturar o id e passar como parâmetro.

Como capturar o componente que está com o foco que está complicado. Mesmo assim, esse código que você postou, já ajudaria na segunda parte.

Cara o foco você não vai ter nunca pois como está usando botões <p:commandButton> quando clicar vai perder o foco o inputText, e quando mandar fazer o update no painel onde está os inputs, também perderá o foco.

Você pode passar um parâmetro para o controller no momento do focus no campo e depois usar isso para identificar em qual campo deve adicionar o valor.

Você tem razão.
Eu tinha montado um teste aqui como você falou, para jogar em um controller, mas e não consegui fazer funcionar.
O que tentei fazer, foi:

                &lt;h:inputText id="campo" value="#{teclado.campo}" onclick="#{teclado.preencherId}"/&gt;

Com o objetivo de ao clicar no inputtext, ele chamasse o preencherId do bean:

	public void preencherId(ActionEvent evt) {
		this.idCampo = evt.getComponent().getId();
	}

Mas não da certo, e retorna:

16:35:13,749 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/RestauranteWEB].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: javax.el.PropertyNotFoundException: /pages/touch/Teclado.xhtml @15,100 onclick="#{teclado.preencherId}": The class ‘br.com.socin.econect.restaurante.web.beans.Teclado’ does not have the property ‘preencherId’.