JSF + a4j não renderiza o valor

pessoal estou com um problema, estou desenvolvendo uma aplicação com JSF ea4j
a intenção é ler um código de barras, interpreta-lo e exibir os valores para o usuário,
mas no momento de atualizar os valores nada acontece, se possivel gostaria de ajuda

segue abaixo o xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich"
                template="./template.xhtml">

    <ui:define name="title">
        Teste
    </ui:define>

    <ui:define name="body">
        <h:form>
            <h:panelGrid>
                <p><a href="template-client.jsf">Home</a></p>
            </h:panelGrid>
        </h:form>

        <h:panelGroup>
            <h:panelGrid columns="2">
                <a4j:status id="status">
                    <f:facet name="start">
                        <h:outputText value="Aguarde a interpretação do boleto"/>
                    </f:facet>
                </a4j:status>
            </h:panelGrid>
        </h:panelGroup>

        <h:form>
            <h:panelGroup>
                <h:panelGrid columns="2">
                    <h:outputLabel for="codigoBarras" value="#{boleto.codigoBarras}"/>
                    <h:inputText id="codigoBarras"
                                 size="44"
                                 immediate="true"
                                 value="#{boletoController.codigoBarras}"
                                 required="true">
                        <f:validateLength minimun="44"
                                          maximum="44"/>
                        <f:validator validatorId="contaspagarweb.controller.CodeValidator"/>
                        <a4j:support event="onblur"
                                     immediate="true"
                                     actionListener="#{boletoController.boletoAction}"
                                     reRender="identificacaoBanco"/>
                    </h:inputText>

                    <h:outputText id="errorMessage" 
                                  value="#{boletoController.errorMessage}"
                                  style="color: red; font-style: italic;"/>
                </h:panelGrid>

                <h:panelGrid columns="2">
                    <h:outputLabel id="identificacaoBanco" for="identificacaoBanco" value="#{boleto.codigoBanco}"/>
                    <h:inputText binding="#{boletoController.identificacaoBancoInput}"
                                 size="20" value="#{boletoController.identificacaoBanco}"/>
                </h:panelGrid>
            </h:panelGroup>
        </h:form>
    </ui:define>
</ui:composition>

abaico o meu controller

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package contaspagarweb.controller;

import br.com.jcomputacao.contaspagar.LeitorCodigoDeBarras;
import br.com.jcomputacao.contaspagar.bean.BoletoBean;
import br.com.jcomputacao.contaspagar.model.Boleto;
import java.util.Iterator;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

/**
 *
 * @author ADM
 */
public class BoletoController extends javax.faces.component.UIPanel {

    private UIInput identificacaoBancoInput = null;
    private BoletoBean bean = new BoletoBean();
    private Boleto boleto = bean.getboleto();
    private String errorMessage = null;
    private String codigoBarras;
    private String identificacaoBanco;

    public Boleto getBoleto() {
        return boleto;
    }

    public void setBoleto(Boleto boleto) {
        this.boleto = boleto;
    }

    public String getCodigoBarras() {
        return codigoBarras;
    }

    public void setCodigoBarras(String codigoBarras) {
        this.codigoBarras = codigoBarras;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public String getIdentificacaoBanco() {
        return identificacaoBanco;
    }

    public void setIdentificacaoBanco(String identificacaoBanco) {
        this.identificacaoBanco = identificacaoBanco;
    }

    public UIInput getIdentificacaoBancoInput() {
        return identificacaoBancoInput;
    }

    public void setIdentificacaoBancoInput(UIInput identificacaoBancoInput) {
        this.identificacaoBancoInput = identificacaoBancoInput;
    }

    public void interpretaBoleto(String codigo) {
        LeitorCodigoDeBarras lcd = new LeitorCodigoDeBarras();
        boleto = lcd.leituraCodigoDeBarras(codigo);
        bean.setboleto(boleto);
        setCamposBoleto(boleto);
    }

    public void boletoAction(ActionEvent evt) {
        try {
            Thread.sleep(250);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        UIInput input = (UIInput) evt.getComponent().getParent();
        if (input != null) {
            String codigo = (String) input.getLocalValue();
            if (codigo != null) {
                interpretaBoleto(codigo);
            }
            FacesContext fc = FacesContext.getCurrentInstance();
            input.validate(fc);
            if (!input.isValid()) {
                setErrorMessage(fc, input);
                identificacaoBancoInput.setSubmittedValue(null);
            }
        }
    }

    private void setErrorMessage(FacesContext fc, UIInput input) {
        Iterator it = fc.getMessages(input.getClientId(fc));
        if (it.hasNext()) {
            FacesMessage facesMessage = (FacesMessage) it.next();
            errorMessage = facesMessage.getSummary();
        }
    }

    private void setCamposBoleto(Boleto boleto) {
        if (boleto != null) {
            String codigoBanco = boleto.getIdentificacaoBanco().toString();
            setIdentificacaoBanco(codigoBanco);
        }else{
            setErrorMessage(errorMessage);
        }
    }
}

Pessoal já resolvi o problema