Foundation
Project Documentation

Summary

Tag name: <tr:table>
UIComponent class: org.apache.myfaces.trinidad.component.core.data.CoreTable
Component type: org.apache.myfaces.trinidad.CoreTable

Naming container: Yes. When referring to children of this component ("partialTriggers", findComponent(), etc.), you must prefix the child's ID with this component's ID and a colon (':').

The Trinidad Table is used to display tabular data. It also supports selection (both single and multiple), sorting, record navigation and detail-disclosure.

Table Model

The Trinidad Table component uses a model to access the data in the underlying list. The specific model class is org.apache.myfaces.trinidad.model.CollectionModel. You may also use other model instances, e.g., java.util.List , array, and javax.faces.model.DataModel. The Table will automatically convert the instance into a CollectionModel.

Columns

The immediate children of a Table component must all be <tr:column> components. Each visible Trinidad Column component creates a separate column in the Table. For more information see the documentation for <column>

Range Navigation

When the list being displayed by a Table is huge, you can enable the Table to break up the list into ranges and display a single range at a time. Range controls are provided on the Table to let the user scroll to the next range, or to go back to the previous range. If the total size of the list is known, a control to let the user jump directly to a particular part of the list is also provided on the Table. Use the Table attributes "rows" and "first" to control the range navigation feature. When the user changes the range, the Table fires a RangeChangeEvent.

Displaying Details

You can configure the Table to display or hide additional details of a particular row in response to a user gesture. When the details feature is enabled, a new column containing a toggle (per row) will render in the Table. When a toggle is activated, the details for that row are displayed. When a toggle is deactivated, the details for the row are hidden. The user can also display or hide the details for all rows at the same time (the controls for this feature are enabled by setting the "allDetailsEnabled" property to true.)

To enable the details feature set the "detailStamp" facet on the Table. Place the components that are used to show the details (of a row), inside this facet. In the following example, the Person's age is displayed in the details section:

    <tr:table var="row">
      <f:facet name="detailStamp">
        <tr:outputText value="#{row.age}"/>
      </f:facet>
    </tr:table>
            

When a detail row is shown or hidden the Table generates a DisclosureEvent. If all detail rows are shown or hidden the Table fires a DisclosureAllEvent.

Selection

The selection feature of a Table lets the user select one or more rows in the list. The user can then perform some operation on the selected rows by activating an appropriate ActionSource component (e.g., by clicking on a commandButton).

There are two types of selection - single and multiple. The type of selection is determined by the "rowSelection" attribute, which can be set to "single" or "multiple".

Sorting

The Table component supports sorting columns in ascending or descending order. A special 3D border on a column header lets the user know that the column is sortable. When the user clicks on a column header to sort a previously unsorted column, the Table sorts the column data in ascending order. Subsequent clicks on the same header sorts the data in the reverse order.

There are three requirements to enable sorting: the underlying table model must support sorting, the "sortProperty" and "sortable" attributes must be set on the column to enable the sort capability for that column.

To support sorting, the CollectionModel instance must implement the following methods:

    public boolean isSortable(String propertyName)
    public void setSortCriteria(List criteria)
    public List getSortCriteria()
            

If the underlying model is not a CollectionModel, the Table automatically examines the actual data to determine which properties are sortable. Any column that has data that implements java.lang.Comparable is sortable. This automatic support cannot be nearly as efficient as coding sorting directly into a CollectionModel (for instance, by translating the sort into an "ORDER BY" SQL clause), but is sufficient for small data sets.

To associate a column with a particular property-name to be used for sorting purposes, use the "sortProperty" attribute on the column. To enable the UI for sorting a particular column, set the "sortable" property to true. For more information see the documentation for <column>.

In the following example, both columns are sortable. Sorting the first column sorts by the "firstname" property; sorting the second column sorts by the "lastname" property.

    <tr:table value="...">
      <tr:column sortProperty="firstname" sortable="true">
        <f:facet name="header">
          <tr:outputText value="Firstname" />
        </f:facet>
        ...
      </tr:column>
      <tr:column sortProperty="lastname" sortable="true">
        <f:facet name="header">
          <tr:outputText value="Lastname" />
        </f:facet>
        ...
      </tr:column>
    </tr:table>
          

Banding

Banding is a technique where groups of rows (or columns) are displayed with alternating background colors. This helps to differentiate between adjacent rows (or columns).

The "banding" attribute on the Table controls the type of banding to use. The "bandingInterval" attribute controls the number of consecutive rows (or columns) that are colored the same.

Note that the above banding attributes on the Table are ignored when the "bandingShade" attribute is used on the Column.

Example(s):

<tr:table value="#{myManagedBean.allEmployees}"
          bandingInterval="2" banding="row" var="emp">
  <tr:column>
    <f:facet name="header">
      <tr:outputText value="Name"/>
    </f:facet>
    <tr:outputText value="#{emp.ename}"/>
  </tr:column>
  <tr:column>
    <f:facet name="header">
      <tr:outputText value="Department Number"/>
    </f:facet>
    <tr:outputText value="#{emp.deptno}"/>
  </tr:column>
</tr:table>

Events

Type Phases Description
org.apache.myfaces.trinidad.event.RowDisclosureEvent Apply Request Values,
Invoke Application
The expansion event is generated for a table when the detail facet of a row is expanded or collapsed. For tree or a treeTable, the expansion event is generated when tree nodes are expanded or collapsed.
org.apache.myfaces.trinidad.event.SelectionEvent Apply Request Values,
Invoke Application
The selection event is delivered when the table selection changes.
org.apache.myfaces.trinidad.event.RangeChangeEvent Apply Request Values,
Invoke Application
The range change event is delivered when the user navigates.
org.apache.myfaces.trinidad.event.SortEvent Apply Request Values,
Invoke Application
The sort event is delivered when the table column sort criteria is changed.
org.apache.myfaces.trinidad.event.AttributeChangeEvent Invoke Application,
Apply Request Values
Event delivered to describe an attribute change. Attribute change events are not delivered for any programmatic change to a property. They are only delivered when a renderer changes a property without the application's specific request. An example of an attribute change events might include the width of a column that supported client-side resizing.

Supported Facets

Name Description
actions content to be rendered inline with the navigation bar.
detailStamp the component to stamp below every row which is disclosed. Adding a detail facet will automatically cause the detail column to be displayed.
footer the component used to render the table footer.
header the component used to render the table header.

Attributes

Name Type Supports EL? Description
allDetailsEnabled boolean Yes whether or not to enable the show/hide all links above the table, which allow the user to show/hide all the detail rows. To enable the detail rows, a "detailStamp" facet must be set on this Table.
attributeChangeListener javax.el.MethodExpression Only EL a method reference to an attribute change listener. Attribute change events are not delivered for any programmatic change to a property. They are only delivered when a renderer changes a property without the application's specific request. An example of an attribute change events might include the width of a column that supported client-side resizing.
autoSubmit boolean Yes If set to TRUE on a form element, the component will automatically submit the enclosing form when an appropriate action takes place (a click, text change, etc.). This only takes effect if rowSelection attribute enabled.
binding org.apache.myfaces.trinidad.component.core.data.CoreTable Only EL an EL reference that will store the component instance on a bean. This can be used to give programmatic access to a component from a backing bean, or to move creation of the component to a backing bean.
columnBandingInterval int Yes the interval between which the column banding alternates. For example, a columnBandingInterval of 1 would display alternately banded columns.
disclosedRowKeys org.apache.myfaces.trinidad.model.RowKeySet Yes the set of disclosed rows for this component. Each entry in the set is a rowKey.
emptyText String Yes text displayed when a table is empty.
first int Yes the index of the first row in the currently range of rows. This index is zero-based. This attribute is used to control which range of rows to display to the user.
horizontalGridVisible boolean Yes if the horizontal grid lines will be drawn.
id String No the identifier for the component. The identifier must follow a subset of the syntax allowed in HTML:
  • Must not be a zero-length String.
  • First character must be an ASCII letter (A-Za-z) or an underscore ('_').
  • Subsequent characters must be an ASCII letter or digit (A-Za-z0-9), an underscore ('_'), or a dash ('-').
immediate boolean Yes whether or not data validation - client-side or server-side - should take place when events are generated by this component. When immediate is true, the default ActionListener provided by the JavaServer Faces implementation should be executed during Apply Request Values phase of the request processing lifecycle, rather than waiting until the Invoke Application phase.
inlineStyle String Yes the CSS styles to use for this component.
onclick String Yes an onclick Javascript handler.
ondblclick String Yes an ondblclick Javascript handler.
onkeydown String Yes an onkeydown Javascript handler.
onkeypress String Yes an onkeypress Javascript handler.
onkeyup String Yes an onkeyup Javascript handler.
onmousedown String Yes an onmousedown Javascript handler.
onmousemove String Yes an onmousemove Javascript handler.
onmouseout String Yes an onmouseout Javascript handler.
onmouseover String Yes an onmouseover Javascript handler.
onmouseup String Yes an onmouseup Javascript handler.
partialTriggers String[] Yes the IDs of the components that should trigger a partial update.

This component will listen on the trigger components. If one of the trigger components receives an event that will cause it to update in some way, this component will request to be updated too.

Separate multiple triggers with a space. e.g., partialTriggers="cmp1 cmp2"

Identifiers must account for NamingContainers. You can use a single colon to start the search from the root, or use multiple colons to move up through the NamingContainer. For example, "::" will pop out of this component's naming container (it pops out of itself if it is a naming container), ":::" will pop out of two naming containers, etc. The search for the partialTrigger begins from there. e.g., partialTriggers=":::commandButton1" the search begins for the component with id = commandButton1 after popping out of two naming containers relative to this component. To go into naming containers, you separate the naming containers with ':', e.g.,partialTriggers= "nc1:nc2:nc3:componentId".

rangeChangeListener javax.el.MethodExpression Only EL a method reference to a rangeChange listener that will be called when a new range is selected.
rendered boolean Yes whether the component is rendered. When set to false, no output will be delivered for this component (the component will not in any way be rendered, and cannot be made visible on the client).
rowBandingInterval int Yes the interval between which the row banding alternates. For example, rowBandingInterval=1 would displayalternately banded rows in the Grid.
rowDisclosureListener javax.el.MethodExpression Only EL a method reference to an ExpansionListener
rowSelection String Yes Valid Values: none, single, multiple

whether rows in this table selectable. Valid values are "none", "single", "multiple"
rows int Yes the maximum number of rows to display in a single range of rows. Some ranges might have fewer than the number of rows specified by this attribute (eg: the last range might have an insufficient number of rows). To display all rows at once, set this attribute to 0. The default is 25.
selectedRowKeys org.apache.myfaces.trinidad.model.RowKeySet Yes the selection state for this component.
selectionListener javax.el.MethodExpression Only EL a method reference to a selection listener
shortDesc String Yes The short description of the component. This text is commonly used by user agents to display tooltip help text.
sortListener javax.el.MethodExpression Only EL a method reference to a sort listener
styleClass String Yes a CSS style class to use for this component.
summary String Yes the summary of this table's purpose and structure for user agents rendering to non-visual media.
value Object Yes the data model being used by this component. The specific model class is org.apache.myfaces.trinidad.model.CollectionModel. You may also use other model instances, e.g., java.util.List , array, and javax.faces.model.DataModel. This component will automatically convert the instance into a CollectionModel.
var String No Name of the EL variable used to reference each element of this collection. Once this component has completed rendering, this variable is removed (or reverted back to its previous value).
varStatus String No Name of the EL variable used to reference the varStatus information. Once this component has completed rendering, this variable is removed (or reverted back to its previous value). The VarStatus provides contextual information about the state of the component to EL expressions. For components that iterate, varStatus also provides loop counter information. Please see the this component's documentation for the specific properties on the varStatus. The common properties on varStatus include:
  • "model" - returns the CollectionModel for this component
  • "index" - returns the zero based row index
verticalGridVisible boolean Yes if the vertical grid lines will be drawn.
width String Yes the width of the table. The value must either be a number of pixels or a percentage - it is not a CSS width.