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;
    }
}