Primefaces como disparar o evento blur e atualizar os dados

Estou precisando de uma ajuda com o Primefaces, eu preciso neste evento abaixo que já está meio encaminhado um exemplo que eu peguei do próprio Primefaces mais que depois vou adaptar para que eu quero, bom é uma grid editável já funcionando, daí você preenche a matricula e vai chamar um método, nesse método vou pesquisar as informações, e preencher mais dois campos da Datatable respectivamente, minha dúvida é, como eu pego essa linha que eu estou editando e disparo com o evento blur passando a matricula que vou querer pesquisar, e depois fazer ele atualizar essa mesma linha com esses dois novos campos preenchidos. Cai no meio do caminho em um projeto na empresa, e nunca trabalhei com Primefaces. Então resumidamente o que eu preciso é que o envento blur funcione que já consigue até funcionar já, mas não sei se é a melhor maneira e com isso vou ter que pegar essa matricula que digitei e conseguir pegar lá no Java pra poder fazer a pesquisa do Funcionário e pegar duas informações e preencher o Nome e o Turno no código abaixo.

<h:form id="form">
   <p:growl id="msgs" showDetail="true"/>
 
   <p:dataTable id="cars1" widgetVar="cars1" var="car" value="#{dtAddRowView.cars1}" editable="true" style="margin-bottom:20px">
	   <f:facet name="header">
		   Funcionários
	   </f:facet>
 
	   <p:ajax event="rowEdit" listener="#{dtAddRowView.onRowEdit}" update=":form:msgs" />
	   <p:ajax event="rowEditCancel" listener="#{dtAddRowView.onRowCancel}" update=":form:msgs" />
 
	   <p:column headerText="Matricula">
		   <p:cellEditor>
			   <f:facet name="output"><h:outputText value="#{car.id}" /></f:facet>
			   <f:facet name="input">
			   <p:inputText value="#{car.id}" style="width:100%" label="Matricula">
					<p:ajax event="blur" listener="#{dtAddRowView.onRowSelect}" update="@form"/>
				</p:inputText>
			   </f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column headerText="Nome">
		   <p:cellEditor>
			   <f:facet name="output"><h:outputText value="#{car.year}" /></f:facet>
			   <f:facet name="input"><p:inputText value="#{car.year}" style="width:100%" label="Year" disabled="true"/></f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column headerText="Turno">
		   <p:cellEditor>
			   <f:facet name="output"><h:outputText value="#{car.brand}" /></f:facet>
			   <f:facet name="input"><p:inputText value="#{car.brand}" style="width:100%" label="Year" disabled="true"/></f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column headerText="Transporte">
		   <p:cellEditor>
			   <f:facet name="output"><h:selectBooleanCheckbox value="#{car.soldState}" /></f:facet>
			   <f:facet name="input"><p:selectBooleanCheckbox value="#{car.soldState}" style="width:100%" label="Year"/></f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column style="width:32px">
		   <p:rowEditor />
	   </p:column>
   </p:dataTable>
 
	<div class="ui-g">
		<div class="ui-g-12">
			<p:commandButton value="Novo Registro" styleClass="ui-priority-primary" process="@this" update=":form:msgs"
							 actionListener="#{dtAddRowView.onAddNew()}" oncomplete="PF('cars1').addRow();"/>
		</div>
	</div>
 
</h:form>

Olá, faz assim:

     <p:inputText value="#{car.id}" style="width:100%" label="Matricula">
		<p:ajax event="blur" listener="#{dtAddRowView.onRowSelect(car)}" process="@this" update="@form"/>
	</p:inputText>

PS: O método que vai no Listener tem que ser void

Obrigado Maike mais foi resolvido.

A solução ficou como abaixo:

HTML:

<h:form id="form">
   <p:growl id="msgs" showDetail="true"/>
 
   <p:dataTable id="dataTableAprovacaoFuncionario" widgetVar="listaAprovacaoFuncionario" var="aprovacaoFuncionario" value="#{dtAddRowView.listaAprovacaoFuncionario}" editable="true" style="margin-bottom:20px">
	   <f:facet name="header">
		   Funcionários
	   </f:facet>
 
	   <p:ajax event="rowEdit" listener="#{dtAddRowView.onRowEdit}" update=":form:msgs"/>
	   <p:ajax event="rowEditCancel" listener="#{dtAddRowView.onRowCancel}" update=":form:msgs"/>
 
	   <p:column headerText="Matricula">
		   <p:cellEditor>
			   <f:facet name="output"><h:outputText value="#{aprovacaoFuncionario.matricula}" /></f:facet>
			   <f:facet name="input">
			   <p:inputText id="matricula" value="#{aprovacaoFuncionario.matricula}" style="width:100%" label="Matricula">
					<p:ajax event="blur" listener="#{dtAddRowView.selectRowAprovacaoFuncionario(aprovacaoFuncionario)}" update=":form:dataTableAprovacaoFuncionario, :form:msgs"/>
				</p:inputText>
			   </f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column headerText="Nome">
		   <p:cellEditor>
			   <f:facet name="output"><h:outputText value="#{aprovacaoFuncionario.nome}" /></f:facet>
			   <f:facet name="input"><p:inputText value="#{aprovacaoFuncionario.nome}" style="width:100%" label="Nome" disabled="true"/></f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column headerText="Turno">
		   <p:cellEditor>
			   <f:facet name="output"><h:outputText value="#{aprovacaoFuncionario.turno}" /></f:facet>
			   <f:facet name="input"><p:inputText value="#{aprovacaoFuncionario.turno}" style="width:100%" label="Turno" disabled="true"/></f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column headerText="Transporte">
		   <p:cellEditor>
			   <f:facet name="output"><h:selectBooleanCheckbox value="#{aprovacaoFuncionario.transporte}" /></f:facet>
			   <f:facet name="input"><p:selectBooleanCheckbox value="#{aprovacaoFuncionario.transporte}" style="width:100%" label="Transporte"/></f:facet>
		   </p:cellEditor>
	   </p:column>
 
	   <p:column style="width:32px">
		   <p:rowEditor />
	   </p:column>
   </p:dataTable>
 
	<div class="ui-g">
		<div class="ui-g-12">
			<p:commandButton value="Novo Registro" styleClass="ui-priority-primary" process="@this" update=":form:msgs"
							 actionListener="#{dtAddRowView.onAddNew()}" oncomplete="PF('listaAprovacaoFuncionario').addRow();"/>
		</div>
	</div>
 
</h:form>

Bean:

@ManagedBean(name="dtAddRowView")
@ViewScoped
public class AddRowView implements Serializable {
 
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@PersistenceContext
	private EntityManager em;
	
	private List<AprovacaoFuncionario> listaAprovacaoFuncionario;
	private AprovacaoFuncionario aprovacaoFuncionario;
 
	@ManagedProperty("#{carService}")
	private CarService service;
 
	@PostConstruct
	public void init() {
		listaAprovacaoFuncionario = service.createCars(10);
		aprovacaoFuncionario = new AprovacaoFuncionario();
	}
 
	public void onRowEdit(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Funcionário Editado", ((AprovacaoFuncionario) event.getObject()).getMatricula());
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
 
	public void onRowCancel(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Edição Cancelada", ((AprovacaoFuncionario) event.getObject()).getMatricula());
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
 
	public void onAddNew() {
		// Add one new car to the table:
		AprovacaoFuncionario aprovacaoFuncionario = service.createCars(1).get(0);
		listaAprovacaoFuncionario.add(aprovacaoFuncionario);
		FacesMessage msg = new FacesMessage("Registro Adicionado", aprovacaoFuncionario.getMatricula());
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}

	public void selectRowAprovacaoFuncionario(AprovacaoFuncionario aprovacaoFuncionario) {
		
		Fun fun = null;
		
		try {
			fun = (Fun) em.createQuery("SELECT f FROM Fun f WHERE ATRREGISTRO = '" + aprovacaoFuncionario.getMatricula() + "'", Fun.class).getSingleResult();
		} catch (NonUniqueResultException e) {
			FacesMessage msg = new FacesMessage("Encontrado mais de um Funcionário com a mesma Matrícula.", aprovacaoFuncionario.getMatricula());
			FacesContext.getCurrentInstance().addMessage(null, msg);
			
			return;
		} catch (NoResultException e) {
			FacesMessage msg = new FacesMessage("Não encontrando o Funcionário informado.", aprovacaoFuncionario.getMatricula());
			FacesContext.getCurrentInstance().addMessage(null, msg);
			
			return;
		}
		
		em.clear();
		Pes pes = (Pes) em.createQuery("SELECT p FROM Pes p WHERE ATRIDPESSOA = " + fun.getIdPessoa(), Pes.class).getSingleResult();
		em.clear();
		FunTur funTur = (FunTur) em.createQuery("SELECT f FROM FunTur f WHERE ATRIDFUNCIONARIO = " + fun.getAtrIdFuncionario(), FunTur.class).getSingleResult();
		em.clear();
		Tur tur = (Tur) em.createQuery("SELECT t FROM Tur t WHERE ATRIDTURNO = " + funTur.getTur().getAtrIdTurno(), Tur.class).getSingleResult();
		
		this.aprovacaoFuncionario = aprovacaoFuncionario;
		this.aprovacaoFuncionario.setNome(pes.getAtrNomePessoa());
		this.aprovacaoFuncionario.setTurno(tur.getAtrNomeTurno());
		
		updateRow();
	}
	
	public void updateRow () {
		aprovacaoFuncionario = new AprovacaoFuncionario();
	}

	public List<AprovacaoFuncionario> getListaAprovacaoFuncionario() {
		return listaAprovacaoFuncionario;
	}

	public void setListaAprovacaoFuncionario(List<AprovacaoFuncionario> listaAprovacaoFuncionario) {
		this.listaAprovacaoFuncionario = listaAprovacaoFuncionario;
	}

	public AprovacaoFuncionario getAprovacaoFuncionario() {
		return aprovacaoFuncionario;
	}

	public void setAprovacaoFuncionario(AprovacaoFuncionario aprovacaoFuncionario) {
		this.aprovacaoFuncionario = aprovacaoFuncionario;
	}

	public CarService getService() {
		return service;
	}

	public void setService(CarService service) {
		this.service = service;
	}
}