|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjavax.faces.component.UIComponent
javax.faces.component.UIComponentBase
javax.faces.component.UIData
org.openfaces.component.OUIData
public class OUIData
This is a modified version of the UIData class copied from MyFaces 2.0.2. Here's a list of modifications from the original version:
The children of this component are expected to be UIColumn components.
Note that the same set of child components are reused to implement each row of the table in turn during such phases as apply-request-values and render-response. Altering any of the members of these components therefore affects the attribute for every row, except for the following members:
This reuse of the child components also means that it is not possible to save a reference to a component during table processing, then access it later and expect it to still represent the same row of the table.
Each of the UIColumn children of this component has a few component children of its own to render the contents of the table cell. However there can be a very large number of rows in a table, so it isn't efficient for the UIColumn and all its child objects to be duplicated for each row in the table. Instead the "flyweight" pattern is used where a serialized state is held for each row. When setRowIndex is invoked, the UIColumn objects and their children serialize their current state then reinitialise themselves from the appropriate saved state. This allows a single set of real objects to represent multiple objects which have the same types but potentially different internal state. When a row is selected for the first time, its state is set to a clean "initial" state. Transient components (including any read-only component) do not save their state; they are just reinitialised as required. The state saved/restored when changing rows is not the complete component state, just the fields that are expected to vary between rows: "submittedValue", "value", "isValid".
Note that a table is a "naming container", so that components within the table have their ids prefixed with the id of the table. Actually, when setRowIndex has been called on a table with id of "zzz" the table pretends to its children that its ID is "zzz_n" where n is the row index. This means that renderers for child components which call component.getClientId automatically get ids of form "zzz_n:childId" thus ensuring that components in different rows of the table get different ids.
When decoding a submitted page, this class iterates over all its possible rowIndex values, restoring the appropriate serialized row state then calling processDecodes on the child components. Because the child components (or their renderers) use getClientId to get the request key to look for parameter data, and because this object pretends to have a different id per row ("zzz_n") a single child component can decode data from each table row in turn without being aware that it is within a table. The table's data model is updated before each call to child.processDecodes, so the child decode method can assume that the data model's rowData points to the model object associated with the row currently being decoded. Exactly the same process applies for the later validation and updateModel phases.
When the data model for the table is bound to a backing bean property, and no validation errors have occured during processing of a postback, the data model is refetched at the start of the rendering phase (ie after the update model phase) so that the contents of the data model can be changed as a result of the latest form submission. Because the saved row state must correspond to the elements within the data model, the row state must be discarded whenever a new data model is fetched; not doing this would cause all sorts of inconsistency issues. This does imply that changing the state of any of the members "submittedValue", "value" or "valid" of a component within the table during the invokeApplication phase has no effect on the rendering of the table. When a validation error has occurred, a new DataModel is not fetched, and the saved state of the child components is not discarded.
see Javadoc of the JSF Specification for more information.
Field Summary | |
---|---|
static java.lang.String |
COMPONENT_FAMILY
|
static java.lang.String |
COMPONENT_TYPE
|
Fields inherited from class javax.faces.component.UIComponent |
---|
BEANINFO_KEY, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, CURRENT_COMPONENT, CURRENT_COMPOSITE_COMPONENT, FACETS_KEY, VIEW_LOCATION_KEY |
Fields inherited from interface javax.faces.component.NamingContainer |
---|
SEPARATOR_CHAR |
Constructor Summary | |
---|---|
OUIData()
Construct an instance of the UIData. |
Method Summary | |
---|---|
void |
broadcast(javax.faces.event.FacesEvent event)
Ensure that before the event's listeners are invoked this UIData component's "current row" is set to the row associated with the event. |
java.lang.String |
createUniqueId(javax.faces.context.FacesContext context,
java.lang.String seed)
|
void |
encodeBegin(javax.faces.context.FacesContext context)
Perform necessary actions when rendering of this component starts, before delegating to the inherited implementation which calls the associated renderer's encodeBegin method. |
void |
encodeEnd(javax.faces.context.FacesContext context)
|
java.lang.String |
getFamily()
|
int |
getFirst()
Defines the index of the first row to be displayed, starting from 0. |
javax.faces.component.UIComponent |
getFooter()
|
javax.faces.component.UIComponent |
getHeader()
|
java.lang.String |
getOnblur()
|
java.lang.String |
getOnclick()
|
java.lang.String |
getOncontextmenu()
|
java.lang.String |
getOndblclick()
|
java.lang.String |
getOnfocus()
|
java.lang.String |
getOnkeydown()
|
java.lang.String |
getOnkeypress()
|
java.lang.String |
getOnkeyup()
|
java.lang.String |
getOnmousedown()
|
java.lang.String |
getOnmousemove()
|
java.lang.String |
getOnmouseout()
|
java.lang.String |
getOnmouseover()
|
java.lang.String |
getOnmouseup()
|
java.lang.String |
getRolloverClass()
|
java.lang.String |
getRolloverStyle()
|
int |
getRowCount()
|
java.lang.Object |
getRowData()
|
int |
getRowIndex()
|
int |
getRows()
Defines the maximum number of rows of data to be displayed. |
java.lang.String |
getStyle()
|
java.lang.String |
getStyleClass()
|
java.lang.Object |
getUiDataValue()
An EL expression that specifies the data model that backs this table. |
java.lang.String |
getVar()
Defines the name of the request-scope variable that will hold the current row during iteration. |
boolean |
invokeOnComponent(javax.faces.context.FacesContext context,
java.lang.String clientId,
javax.faces.component.ContextCallback callback)
|
boolean |
isRowAvailable()
|
boolean |
isRowAvailableAfterRestoring(int rowIndex)
|
void |
processDecodes(javax.faces.context.FacesContext context)
|
void |
processUpdates(javax.faces.context.FacesContext context)
|
void |
processValidators(javax.faces.context.FacesContext context)
|
void |
queueEvent(javax.faces.event.FacesEvent event)
Modify events queued for any child components so that the UIData state will be correctly configured before the event's listeners are executed. |
static void |
restoreDescendantComponentStates(java.util.Iterator<javax.faces.component.UIComponent> childIterator,
java.lang.Object state,
boolean restoreChildFacets)
Overwrite the state of the child components of this component with data previously saved by method saveDescendantComponentStates. |
static java.util.Collection<java.lang.Object[]> |
saveDescendantComponentStates(java.util.Iterator<javax.faces.component.UIComponent> childIterator,
boolean saveChildFacets)
Walk the tree of child components of this UIData, saving the parts of their state that can vary between rows. |
void |
setFirst(int first)
|
void |
setFooter(javax.faces.component.UIComponent footer)
|
void |
setHeader(javax.faces.component.UIComponent header)
|
void |
setOnblur(java.lang.String onblur)
|
void |
setOnclick(java.lang.String onclick)
|
void |
setOncontextmenu(java.lang.String oncontextmenu)
|
void |
setOndblclick(java.lang.String ondblclick)
|
void |
setOnfocus(java.lang.String onfocus)
|
void |
setOnkeydown(java.lang.String onkeydown)
|
void |
setOnkeypress(java.lang.String onkeypress)
|
void |
setOnkeyup(java.lang.String onkeyup)
|
void |
setOnmousedown(java.lang.String onmousedown)
|
void |
setOnmousemove(java.lang.String onmousemove)
|
void |
setOnmouseout(java.lang.String onmouseout)
|
void |
setOnmouseover(java.lang.String onmouseover)
|
void |
setOnmouseup(java.lang.String onmouseup)
|
void |
setRolloverClass(java.lang.String rolloverClass)
|
void |
setRolloverStyle(java.lang.String rolloverStyle)
|
void |
setRowIndex(int rowIndex)
Set the current row index that methods like getRowData use. |
void |
setRows(int rows)
Set the maximum number of rows displayed in the table. |
void |
setStyle(java.lang.String style)
|
void |
setStyleClass(java.lang.String styleClass)
|
void |
setUiDataValue(java.lang.Object value)
|
void |
setValueExpression(java.lang.String name,
javax.el.ValueExpression binding)
|
void |
setVar(java.lang.String var)
|
boolean |
visitTree(javax.faces.component.visit.VisitContext context,
javax.faces.component.visit.VisitCallback callback)
Overrides the behavior in UIComponent.visitTree(javax.faces.component.visit.VisitContext, javax.faces.component.visit.VisitCallback) to handle iteration correctly. |
Methods inherited from class javax.faces.component.UIData |
---|
getClientId, getValue, setValue, setValueBinding |
Methods inherited from class javax.faces.component.UIComponentBase |
---|
addClientBehavior, clearInitialState, decode, encodeChildren, findComponent, getAttributes, getChildCount, getChildren, getClientBehaviors, getDefaultEventName, getEventNames, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getParent, getRendererType, getRendersChildren, getValueBinding, isRendered, isTransient, markInitialState, processRestoreState, processSaveState, restoreAttachedState, restoreState, saveAttachedState, saveState, setId, setParent, setRendered, setRendererType, setTransient |
Methods inherited from class javax.faces.component.UIComponent |
---|
encodeAll, getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getListenersForEventClass, getNamingContainer, getResourceBundleMap, getValueExpression, initialStateMarked, isCompositeComponent, isInView, popComponentFromEL, processEvent, pushComponentToEL, setInView, subscribeToEvent, unsubscribeFromEvent |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String COMPONENT_FAMILY
public static final java.lang.String COMPONENT_TYPE
Constructor Detail |
---|
public OUIData()
Method Detail |
---|
public boolean invokeOnComponent(javax.faces.context.FacesContext context, java.lang.String clientId, javax.faces.component.ContextCallback callback) throws javax.faces.FacesException
invokeOnComponent
in class javax.faces.component.UIData
javax.faces.FacesException
public void setFooter(javax.faces.component.UIComponent footer)
setFooter
in class javax.faces.component.UIData
public javax.faces.component.UIComponent getFooter()
getFooter
in class javax.faces.component.UIData
public void setHeader(javax.faces.component.UIComponent header)
setHeader
in class javax.faces.component.UIData
public javax.faces.component.UIComponent getHeader()
getHeader
in class javax.faces.component.UIData
public boolean isRowAvailable()
isRowAvailable
in class javax.faces.component.UIData
public int getRowCount()
getRowCount
in class javax.faces.component.UIData
public java.lang.Object getRowData()
getRowData
in class javax.faces.component.UIData
public int getRowIndex()
getRowIndex
in class javax.faces.component.UIData
public void setRowIndex(int rowIndex)
setRowIndex
in class javax.faces.component.UIData
rowIndex
- public static void restoreDescendantComponentStates(java.util.Iterator<javax.faces.component.UIComponent> childIterator, java.lang.Object state, boolean restoreChildFacets)
public static java.util.Collection<java.lang.Object[]> saveDescendantComponentStates(java.util.Iterator<javax.faces.component.UIComponent> childIterator, boolean saveChildFacets)
public void setValueExpression(java.lang.String name, javax.el.ValueExpression binding)
setValueExpression
in class javax.faces.component.UIData
public void queueEvent(javax.faces.event.FacesEvent event)
queueEvent
in class javax.faces.component.UIData
public void broadcast(javax.faces.event.FacesEvent event) throws javax.faces.event.AbortProcessingException
broadcast
in class javax.faces.component.UIData
javax.faces.event.AbortProcessingException
public java.lang.String createUniqueId(javax.faces.context.FacesContext context, java.lang.String seed)
createUniqueId
in interface javax.faces.component.UniqueIdVendor
createUniqueId
in class javax.faces.component.UIData
public void encodeBegin(javax.faces.context.FacesContext context) throws java.io.IOException
encodeBegin
in class javax.faces.component.UIData
java.io.IOException
public void encodeEnd(javax.faces.context.FacesContext context) throws java.io.IOException
encodeEnd
in class javax.faces.component.UIComponentBase
java.io.IOException
UIComponentBase.encodeEnd(javax.faces.context.FacesContext)
public void processDecodes(javax.faces.context.FacesContext context)
processDecodes
in class javax.faces.component.UIData
public void processValidators(javax.faces.context.FacesContext context)
processValidators
in class javax.faces.component.UIData
public void processUpdates(javax.faces.context.FacesContext context)
processUpdates
in class javax.faces.component.UIData
public java.lang.Object getUiDataValue()
The value referenced by the EL expression can be of any type.
Note in particular that unordered collections, eg Set are not supported. Therefore if the value expression references such an object then the table will be considered to contain just one element - the collection itself.
public void setUiDataValue(java.lang.Object value)
public int getFirst()
getFirst
in class javax.faces.component.UIData
public void setFirst(int first)
setFirst
in class javax.faces.component.UIData
public int getRows()
Specify zero to display all rows from the "first" row to the end of available data.
getRows
in class javax.faces.component.UIData
public void setRows(int rows)
setRows
in class javax.faces.component.UIData
public java.lang.String getVar()
During rendering of child components of this UIData, the variable with this name can be read to learn what the "rowData" object for the row currently being rendered is.
This value must be a static value, ie an EL expression is not permitted.
getVar
in class javax.faces.component.UIData
public boolean visitTree(javax.faces.component.visit.VisitContext context, javax.faces.component.visit.VisitCallback callback)
visitTree
in class javax.faces.component.UIData
context
- the visit context which handles the processing detailscallback
- the callback to be performed
public void setVar(java.lang.String var)
setVar
in class javax.faces.component.UIData
public java.lang.String getFamily()
getFamily
in class javax.faces.component.UIData
public boolean isRowAvailableAfterRestoring(int rowIndex)
public java.lang.String getStyle()
getStyle
in interface OUIComponent
public void setStyle(java.lang.String style)
setStyle
in interface OUIComponent
public java.lang.String getRolloverStyle()
getRolloverStyle
in interface OUIComponent
public void setRolloverStyle(java.lang.String rolloverStyle)
setRolloverStyle
in interface OUIComponent
public java.lang.String getRolloverClass()
getRolloverClass
in interface OUIComponent
public void setRolloverClass(java.lang.String rolloverClass)
setRolloverClass
in interface OUIComponent
public java.lang.String getStyleClass()
getStyleClass
in interface OUIComponent
public void setStyleClass(java.lang.String styleClass)
setStyleClass
in interface OUIComponent
public java.lang.String getOnkeypress()
getOnkeypress
in interface OUIComponent
public void setOnkeypress(java.lang.String onkeypress)
setOnkeypress
in interface OUIComponent
public java.lang.String getOncontextmenu()
getOncontextmenu
in interface OUIComponent
public void setOncontextmenu(java.lang.String oncontextmenu)
setOncontextmenu
in interface OUIComponent
public java.lang.String getOnclick()
getOnclick
in interface OUIComponent
public void setOnclick(java.lang.String onclick)
setOnclick
in interface OUIComponent
public java.lang.String getOndblclick()
getOndblclick
in interface OUIComponent
public void setOndblclick(java.lang.String ondblclick)
setOndblclick
in interface OUIComponent
public java.lang.String getOnmousedown()
getOnmousedown
in interface OUIComponent
public void setOnmousedown(java.lang.String onmousedown)
setOnmousedown
in interface OUIComponent
public java.lang.String getOnmouseover()
getOnmouseover
in interface OUIComponent
public void setOnmouseover(java.lang.String onmouseover)
setOnmouseover
in interface OUIComponent
public java.lang.String getOnmousemove()
getOnmousemove
in interface OUIComponent
public void setOnmousemove(java.lang.String onmousemove)
setOnmousemove
in interface OUIComponent
public java.lang.String getOnmouseout()
getOnmouseout
in interface OUIComponent
public void setOnmouseout(java.lang.String onmouseout)
setOnmouseout
in interface OUIComponent
public java.lang.String getOnmouseup()
getOnmouseup
in interface OUIComponent
public void setOnmouseup(java.lang.String onmouseup)
setOnmouseup
in interface OUIComponent
public java.lang.String getOnfocus()
getOnfocus
in interface OUIComponent
public void setOnfocus(java.lang.String onfocus)
setOnfocus
in interface OUIComponent
public java.lang.String getOnblur()
getOnblur
in interface OUIComponent
public void setOnblur(java.lang.String onblur)
setOnblur
in interface OUIComponent
public java.lang.String getOnkeydown()
getOnkeydown
in interface OUIComponent
public void setOnkeydown(java.lang.String onkeydown)
setOnkeydown
in interface OUIComponent
public java.lang.String getOnkeyup()
getOnkeyup
in interface OUIComponent
public void setOnkeyup(java.lang.String onkeyup)
setOnkeyup
in interface OUIComponent
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |