Attach events to the Widget lifecycle so you can call client side Javascript during PostConstruct, PostRefresh, or PreDestroy of the widget.
<div class="card">
<h:form>
<p:growl widgetVar="msgs"/>
<h:panelGrid columns="2" cellpadding="7" styleClass="mb-3">
<h:outputLabel for="name" value="Name:" style="font-weight:bold"/>
<p:inputText id="name" value="#{lifecycleView.text}" widgetVar="wgtName">
<f:attribute name="widgetPreConstruct"
value="PF('msgs').renderMessage({severity: 'info', summary: cfg.id + ' Widget Initialized'})"/>
<f:attribute name="widgetPostConstruct"
value="PF('msgs').renderMessage({severity: 'info', summary: widget.id + ' Widget Created'})"/>
<f:attribute name="widgetPostRefresh"
value="PF('msgs').renderMessage({severity: 'info', summary: widget.id + ' Widget Refreshed'})"/>
<f:attribute name="widgetPreDestroy"
value="PF('msgs').renderMessage({severity: 'info', summary: widget.id + ' Widget Destroyed'})"/>
</p:inputText>
</h:panelGrid>
<p:commandButton value="Submit" update="@form" icon="pi pi-check" styleClass="mr-2"/>
<p:commandButton value="Destroy" icon="pi pi-times" onclick="PF('wgtName').destroy(); return false"
styleClass="ui-button-danger"/>
</h:form>
</div>
package org.primefaces.showcase.view.ajax;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;
@Named
@RequestScoped
@RegisterForReflection(serialization = true)
public class LifecycleView {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}