It's easy to implement a custom ValueChangeListener and use it in any EditableValueHolder Facelet component.

General Usage

Set type attribute with a fully qualified Java class name implementing ValueChangeListener to be applied when the parent EditableValueHolder value changes. Important note: there is usually confusion about ValueChangeListener and client-side events. ValueChangeListener are only server-side related events. For using client-side ones, just use any of the provided mechanism (f:ajax with event attribute, etc).

Codi font

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core"
	xmlns:h="http://xmlns.jcp.org/jsf/html"	xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

		<h:messages layout="table" />
		<h:inputText value="#{validationModelBean.otherText}" label="#{i18n['f-validator-label']}">
			<f:valueChangeListener type="com.liferay.faces.showcase.bean.ShowcaseValueChangeListener"/>
		<h:commandButton value="#{i18n['submit']}">
			<f:ajax	execute="@form" render="@form"/>

public class ShowcaseValueChangeListener implements ValueChangeListener {

	public void processValueChange(ValueChangeEvent event) throws AbortProcessingException {

		FacesContext facesContext = FacesContext.getCurrentInstance();

		FacesMessage facesMessage = new FacesMessage("The valueChangeListener was called." + "The new value is " +
		facesContext.addMessage(null, facesMessage);

Liferay Faces Bridge Implementation 5.0.0 + Liferay Faces Portal 5.0.0 + Showcase Common 3.1.1 + Liferay Faces Util 3.4.1 + Mojarra 2.2.20