Tobago Demo

Menu

Behavior

There are two kinds of behaviors:

  • <f:ajax/> send an ajax request
  • <tc:event/> do a full page reload

Tag Library Documentation: <f:ajax/> | <tc:event/>

Basic example

Type a text into the input field. After leaving the input field, the given text is shown in the output field.

f:ajax

<tc:in label="Ajax Input" value="#{behaviorController.ajax}"> <f:ajax render="outAjax"/> </tc:in>

tc:event

<tc:in label="Event Input" value="#{behaviorController.event}"> <tc:event/> </tc:in>

Change the event

It's possible to change the event name. For example if you want a double click event, change the event name to dblclick.

<tc:button label="Ajax Double Click"> <f:ajax event="dblclick" render="outCounter" listener="..."/> </tc:button> <tc:button label="Event Double Click"> <tc:event event="dblclick" actionListener="..."/> </tc:button>0

tc:event as a paranet component

<tc:event> can contain <f:ajax> or <tc:operation> tags.

This is helpfull if the parent component cannot handle operations by itself, for example <tc:row/>. In this case, the event attribute of <f:ajax/> will be ignored.

<tc:row> <tc:event> <f:ajax execute=":::popup" render=":::popup" listener="..."/> <tc:operation name="show" for=":::popup"/> </tc:event> </tc:row>

f:ajax and tc:event

<f:ajax/> and <tc:event/> can be used side by side. A click on the button fires the AJAX event, a double click do a full page reload.

<tc:button id="btnAjaxEvent" label="Submit" type="submit"> <f:ajax event="click" render="out" listener="#{behaviorController.eventOutput}"/> <tc:event event="dblclick" actionListener="#{behaviorController.eventOutput}"/> </tc:button> <tc:out id="out" label="Output:" value="#{behaviorController.output}"/>

DOM events

The <tc:event/> tag allows some control over DOM events.

stopPropagation

The stopPropagation attribute prevents further propagation of the current event (see stopPropagation). This is useful for example for a sortable sheet with a component inside the bar-facet.

In the following example the input field for filter by names can be clicked without execute the sorting.

<tc:sheet ...> <tc:column label="Name" sortable="true"> <f:facet name="bar"> <tc:panel> <tc:style customClass="d-inline-block"/> <tc:event stopPropagation="true" omit="true"> <tc:in value="#{sheetFilterController.name}"> <f:ajax execute=":::sheet" render=":::sheet" listener="#{sheetFilterController.filter}"/> </tc:in> </tc:event> </tc:panel> </f:facet> <tc:out value="#{object.name}" plain="true"/> </tc:column> ... </tc:sheet>
NameOrbitDistancePeriod
Sun-00.0
MercurySun5791087.97
VenusSun108200224.7
EarthSun149600365.26
Rows 1 to 4 of 88
  • Page 1 of 22

Custom event

If the customEventName attribute is set, a custom event is fired by the given name.

<tc:button label="Fire event"> <tc:event omit="true" customEventName="my-event"/> </tc:button> <tc:panel> <tc:style customClass="custom-event-result"/> </tc:panel> document.addEventListener("DOMContentLoaded", function (event) { document.querySelector("body").addEventListener("my-event", () => document.querySelector(".custom-event-result").textContent = "my-event fired at " + new Date()); });
© 2005-2024 Apache Software Foundation, Licensed under the Apache License, Version 2.0.