|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.vaadin.ui.AbstractComponent
com.vaadin.ui.AbstractField
public abstract class AbstractField
Abstract field component for implementing buffered property editors. The
field may hold an internal value, or it may be connected to any data source
that implements the Property
interface.
AbstractField
implements that interface itself, too, so
accessing the Property value represented by it is straightforward.
AbstractField also provides the Buffered
interface
for buffering the data source value. By default the Field is in write
through-mode and setWriteThrough(boolean)
should be called to enable
buffering.
The class also supports validators
to make
sure the value contained in the field is valid.
Nested Class Summary | |
---|---|
static class |
AbstractField.FocusShortcut
A ready-made ShortcutListener that focuses the given
Focusable (usually a Field ) when the keyboard shortcut is
invoked. |
class |
AbstractField.ReadOnlyStatusChangeEvent
An Event object specifying the Property whose read-only
status has changed. |
Nested classes/interfaces inherited from class com.vaadin.ui.AbstractComponent |
---|
AbstractComponent.ComponentErrorEvent, AbstractComponent.ComponentErrorHandler |
Nested classes/interfaces inherited from interface com.vaadin.ui.Field |
---|
Field.ValueChangeEvent |
Nested classes/interfaces inherited from interface com.vaadin.data.Buffered |
---|
Buffered.SourceException |
Nested classes/interfaces inherited from interface com.vaadin.data.Property |
---|
Property.ConversionException, Property.Editor, Property.ReadOnlyException, Property.ReadOnlyStatusChangeListener, Property.ReadOnlyStatusChangeNotifier, Property.ValueChangeListener, Property.ValueChangeNotifier, Property.Viewer |
Constructor Summary | |
---|---|
AbstractField()
|
Method Summary | |
---|---|
void |
addListener(Property.ReadOnlyStatusChangeListener listener)
Registers a new read-only status change listener for this Property. |
void |
addListener(Property.ValueChangeListener listener)
Registers a new value change listener for this Property. |
void |
addShortcutListener(ShortcutListener shortcut)
|
void |
addValidator(Validator validator)
Adds a new validator for the field's value. |
void |
attach()
Notifies the component that it is connected to an application. |
void |
changeVariables(Object source,
Map<String,Object> variables)
Called when one or more variables handled by the implementing class are changed. |
void |
commit()
Updates all changes since the previous commit to the data source. |
static AbstractField |
constructField(Class<?> propertyType)
Deprecated. use e.g. DefaultFieldFactory.createFieldByPropertyType(Class)
instead |
void |
detach()
Notifies the component that it is detached from the application. |
void |
discard()
Discards all changes since last commit. |
protected void |
fireReadOnlyStatusChange()
Emits the read-only status change event. |
protected void |
fireValueChange(boolean repaintIsNotNeeded)
Emits the value change event. |
void |
focus()
Sets the focus for this component if the component is Focusable . |
protected ActionManager |
getActionManager()
Gets the ActionManager used to manage the
ShortcutListener s added to this Field . |
ErrorMessage |
getErrorMessage()
Error messages shown by the fields are composites of the error message thrown by the superclasses (that is the component error message), validation errors and buffered source errors. |
Property |
getPropertyDataSource()
Gets the current data source of the field, if any. |
String |
getRequiredError()
Gets the error message that is to be displayed if a required field is empty. |
int |
getTabIndex()
Gets the tabulator index of the Focusable component. |
abstract Class<?> |
getType()
Returns the type of the Property. |
Collection<Validator> |
getValidators()
Gets the validators of the field. |
Object |
getValue()
Gets the current value of the field. |
protected boolean |
isEmpty()
Is the field empty? In general, "empty" state is same as null. |
boolean |
isInvalidAllowed()
Fields allow invalid values by default. |
boolean |
isInvalidCommitted()
Tests if the invalid data is committed to datasource. |
boolean |
isModified()
Tests if the value stored in the object has been modified since it was last updated from the data source. |
boolean |
isReadOnly()
The abstract field is read only also if the data source is in read only mode. |
boolean |
isReadThrough()
Tests if the object is in read-through mode. |
boolean |
isRequired()
Is this field required. |
boolean |
isValid()
Tests the current value against registered validators if the field is not empty. |
boolean |
isValidationVisible()
Is automatic, visible validation enabled? If automatic validation is enabled, any validators connected to this component are evaluated while painting the component and potential error messages are sent to client. |
boolean |
isWriteThrough()
Tests if the object is in write-through mode. |
void |
paintContent(PaintTarget target)
Paints any needed component-specific things to the given UIDL stream. |
void |
readOnlyStatusChange(Property.ReadOnlyStatusChangeEvent event)
React to read only status changes of the property by requesting a repaint. |
void |
removeAllValidators()
Removes all validators from the field. |
void |
removeListener(Property.ReadOnlyStatusChangeListener listener)
Removes a previously registered read-only status change listener. |
void |
removeListener(Property.ValueChangeListener listener)
Removes a previously registered value change listener. |
void |
removeShortcutListener(ShortcutListener shortcut)
|
void |
removeValidator(Validator validator)
Removes the validator from the field. |
void |
setCurrentBufferedSourceException(Buffered.SourceException currentBufferedSourceException)
Sets the current buffered source exception. |
protected void |
setInternalValue(Object newValue)
Sets the internal field value. |
void |
setInvalidAllowed(boolean invalidAllowed)
Fields allow invalid values by default. |
void |
setInvalidCommitted(boolean isCommitted)
Sets if the invalid data should be committed to datasource. |
void |
setPropertyDataSource(Property newDataSource)
Sets the specified Property as the data source for the field. |
void |
setReadOnly(boolean readOnly)
Changes the readonly state and throw read-only status change events. |
void |
setReadThrough(boolean readThrough)
Sets the object's read-through mode to the specified status. |
void |
setRequired(boolean required)
Sets the field required. |
void |
setRequiredError(String requiredMessage)
Set the error that is show if this field is required, but empty. |
void |
setTabIndex(int tabIndex)
Sets the tabulator index of the Focusable component. |
void |
setValidationVisible(boolean validateAutomatically)
Enable or disable automatic, visible validation. |
void |
setValue(Object newValue)
Sets the value of the field. |
protected void |
setValue(Object newValue,
boolean repaintIsNotNeeded)
Sets the value of the field. |
void |
setWriteThrough(boolean writeThrough)
Sets the object's write-through mode to the specified status. |
protected boolean |
shouldHideErrors()
Returns true if the error indicator be hidden when painting the component even when there are errors. |
String |
toString()
Returns the value of the Property in human readable textual format. |
void |
validate()
Checks the validity of the Validatable by validating the field with all attached validators except when the field is empty. |
void |
valueChange(Property.ValueChangeEvent event)
This method listens to data source value changes and passes the changes forwards. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface com.vaadin.ui.Field |
---|
getDescription, setCaption, setDescription |
Constructor Detail |
---|
public AbstractField()
Method Detail |
---|
public void paintContent(PaintTarget target) throws PaintException
AbstractComponent
AbstractComponent.paint(PaintTarget)
method handles all general
attributes common to all components, and it calls this method to paint
any component-specific attributes to the UIDL stream.
paintContent
in class AbstractComponent
target
- the target UIDL stream where the component should paint itself
to
PaintException
- if the paint operation failed.protected boolean shouldHideErrors()
public abstract Class<?> getType()
Property
getValue
and
setValue
must be compatible with this type: one must be able
to safely cast the value returned from getValue
to the given
type and pass any variable assignable to this type as an argument to
setValue
.
getType
in interface Property
public boolean isReadOnly()
isReadOnly
in interface Property
isReadOnly
in interface Component
isReadOnly
in class AbstractComponent
true
if the component or any of its parents is in
read-only mode, false
if not.Component.setReadOnly(boolean)
public void setReadOnly(boolean readOnly)
setReadOnly
in interface Property
setReadOnly
in interface Component
setReadOnly
in class AbstractComponent
readOnly
- a boolean value specifying whether the component is put
read-only mode or notComponent.setReadOnly(boolean)
public boolean isInvalidCommitted()
isInvalidCommitted
in interface BufferedValidatable
BufferedValidatable.isInvalidCommitted()
public void setInvalidCommitted(boolean isCommitted)
setInvalidCommitted
in interface BufferedValidatable
BufferedValidatable.setInvalidCommitted(boolean)
public void commit() throws Buffered.SourceException, Validator.InvalidValueException
Buffered
commit
is called.
commit
in interface Buffered
Buffered.SourceException
- if the operation fails because of an exception is thrown by
the data source. The cause is included in the exception.
Validator.InvalidValueException
- if the operation fails because validation is enabled and the
values do not validatepublic void discard() throws Buffered.SourceException
Buffered
discard
in interface Buffered
Buffered.SourceException
- if the operation fails because of an exception is thrown by
the data source. The cause is included in the exception.public boolean isModified()
Buffered
isModified
in interface Buffered
true
if the value in the object has been modified
since the last data source update, false
if not.public boolean isWriteThrough()
Buffered
commit
being called after the modification.
isWriteThrough
in interface Buffered
true
if the object is in write-through mode,
false
if it's not.public void setWriteThrough(boolean writeThrough) throws Buffered.SourceException, Validator.InvalidValueException
Buffered
commit
operation
will be performed.
setWriteThrough
in interface Buffered
writeThrough
- Boolean value to indicate if the object should be in
write-through mode after the call.
Buffered.SourceException
- If the operation fails because of an exception is thrown by
the data source.
Validator.InvalidValueException
- If the implicit commit operation fails because of a
validation error.public boolean isReadThrough()
Buffered
The only exception to this rule is that when the object is not in write-through mode and it's buffer contains a modified value, the value retrieved from the object will be the locally modified value in the buffer which may differ from the value in the data source.
isReadThrough
in interface Buffered
true
if the object is in read-through mode,
false
if it's not.public void setReadThrough(boolean readThrough) throws Buffered.SourceException
Buffered
setReadThrough
in interface Buffered
readThrough
- Boolean value to indicate if the object should be in
read-through mode after the call.
Buffered.SourceException
- If the operation fails because of an exception is thrown by
the data source. The cause is included in the exception.public String toString()
toString
in interface Property
toString
in class Object
String
representation of the value stored in the
PropertyObject.toString()
public Object getValue()
This is the visible, modified and possible invalid value the user have entered to the field. In the read-through mode, the abstract buffer is also updated and validation is performed.
Note that the object returned is compatible with getType(). For example, if the type is String, this returns Strings even when the underlying datasource is of some other type. In order to access the datasources native type, use getPropertyDatasource().getValue() instead.
Note that when you extend AbstractField, you must reimplement this method if datasource.getValue() is not assignable to class returned by getType() AND getType() is not String. In case of Strings, getValue() calls datasource.toString() instead of datasource.getValue().
getValue
in interface Property
public void setValue(Object newValue) throws Property.ReadOnlyException, Property.ConversionException
setValue
in interface Property
newValue
- the New value of the field.
Property.ReadOnlyException
Property.ConversionException
protected void setValue(Object newValue, boolean repaintIsNotNeeded) throws Property.ReadOnlyException, Property.ConversionException
newValue
- the New value of the field.repaintIsNotNeeded
- True iff caller is sure that repaint is not needed.
Property.ReadOnlyException
Property.ConversionException
public Property getPropertyDataSource()
getPropertyDataSource
in interface Property.Viewer
null
if
none defined.public void setPropertyDataSource(Property newDataSource)
Sets the specified Property as the data source for the field. All uncommitted changes are replaced with a value from the new data source.
If the datasource has any validators, the same validators are added to the field. Because the default behavior of the field is to allow invalid values, but not to allow committing them, this only adds visual error messages to fields and do not allow committing them as long as the value is invalid. After the value is valid, the error message is not shown and the commit can be done normally.
If the data source implements
Property.ValueChangeNotifier
and/or
Property.ReadOnlyStatusChangeNotifier
, the field
registers itself as a listener and updates itself according to the events
it receives. To avoid memory leaks caused by references to a field no
longer in use, the listener registrations are removed on
detach
and re-added on
attach
.
Note: before 6.5 we actually called discard() method in the beginning of the method. This was removed to simplify implementation, avoid excess calls to backing property and to avoid odd value change events that were previously fired (developer expects 0-1 value change events if this method is called). Some complex field implementations might now need to override this method to do housekeeping similar to discard().
setPropertyDataSource
in interface Property.Viewer
newDataSource
- the new data source Property.public void addValidator(Validator validator)
addValidator
in interface Validatable
validator
- the new validator to be added.public Collection<Validator> getValidators()
getValidators
in interface Validatable
public void removeValidator(Validator validator)
removeValidator
in interface Validatable
validator
- the validator to remove.public void removeAllValidators()
public boolean isValid()
isValid
in interface Validatable
true
if all registered validators claim that the
current value is valid or if the field is empty and not required,
false
otherwise.public void validate() throws Validator.InvalidValueException
validate
in interface Validatable
Validator.InvalidValueException
- if the value is not validValidatable.validate()
public boolean isInvalidAllowed()
isInvalidAllowed
in interface Validatable
Validatable.isInvalidAllowed()
public void setInvalidAllowed(boolean invalidAllowed) throws UnsupportedOperationException
In common setting where the user wants to assure the correctness of the datasource, but allow temporarily invalid contents in the field, the user should add the validators to datasource, that should not allow invalid values. The validators are automatically copied to the field when the datasource is set.
setInvalidAllowed
in interface Validatable
UnsupportedOperationException
- if the setInvalidAllowed is not supported.Validatable.setInvalidAllowed(boolean)
public ErrorMessage getErrorMessage()
getErrorMessage
in class AbstractComponent
AbstractComponent.getErrorMessage()
public void addListener(Property.ValueChangeListener listener)
Property.ValueChangeNotifier
addListener
in interface Property.ValueChangeNotifier
listener
- the new Listener to be registeredpublic void removeListener(Property.ValueChangeListener listener)
Property.ValueChangeNotifier
removeListener
in interface Property.ValueChangeNotifier
listener
- listener to be removedprotected void fireValueChange(boolean repaintIsNotNeeded)
public void readOnlyStatusChange(Property.ReadOnlyStatusChangeEvent event)
readOnlyStatusChange
in interface Property.ReadOnlyStatusChangeListener
event
- Read-only status change event objectProperty.ReadOnlyStatusChangeListener
public void addListener(Property.ReadOnlyStatusChangeListener listener)
Property.ReadOnlyStatusChangeNotifier
addListener
in interface Property.ReadOnlyStatusChangeNotifier
listener
- the new Listener to be registeredpublic void removeListener(Property.ReadOnlyStatusChangeListener listener)
Property.ReadOnlyStatusChangeNotifier
removeListener
in interface Property.ReadOnlyStatusChangeNotifier
listener
- listener to be removedprotected void fireReadOnlyStatusChange()
public void valueChange(Property.ValueChangeEvent event)
valueChange
in interface Property.ValueChangeListener
event
- the value change event telling the data source contents have
changed.public void changeVariables(Object source, Map<String,Object> variables)
VariableOwner
changeVariables
in interface VariableOwner
changeVariables
in class AbstractComponent
source
- the Source of the variable change. This is the origin of the
event. For example in Web Adapter this is the request.variables
- the Mapping from variable names to new variable values.public void focus()
Focusable
.
focus
in interface Component.Focusable
focus
in class AbstractComponent
FieldEvents
,
FieldEvents.FocusEvent
,
FieldEvents.FocusListener
,
FieldEvents.BlurEvent
,
FieldEvents.BlurListener
@Deprecated public static AbstractField constructField(Class<?> propertyType)
DefaultFieldFactory.createFieldByPropertyType(Class)
instead
This returns most suitable field type for editing property of given type.
propertyType
- the Type of the property, that needs to be edited.public int getTabIndex()
Component.Focusable
Focusable
component.
getTabIndex
in interface Component.Focusable
Focusable
componentComponent.Focusable.setTabIndex(int)
public void setTabIndex(int tabIndex)
Component.Focusable
Focusable
component.
The tab index property is used to specify the order in which the
fields are focused when the user presses the Tab key. Components with
a defined tab index are focused sequentially first, and then the
components with no tab index.
Form loginBox = new Form(); loginBox.setCaption("Login"); layout.addComponent(loginBox); // Create the first field which will be focused TextField username = new TextField("User name"); loginBox.addField("username", username); // Set focus to the user name username.focus(); TextField password = new TextField("Password"); loginBox.addField("password", password); Button login = new Button("Login"); loginBox.getFooter().addComponent(login); // An additional component which natural focus order would // be after the button. CheckBox remember = new CheckBox("Remember me"); loginBox.getFooter().addComponent(remember); username.setTabIndex(1); password.setTabIndex(2); remember.setTabIndex(3); // Different than natural place login.setTabIndex(4);
After all focusable user interface components are done, the browser can begin again from the component with the smallest tab index, or it can take the focus out of the page, for example, to the location bar.
If the tab index is not set (is set to zero), the default tab order is used. The order is somewhat browser-dependent, but generally follows the HTML structure of the page.
A negative value means that the component is completely removed from the tabulation order and can not be reached by pressing the Tab key at all.
setTabIndex
in interface Component.Focusable
tabIndex
- the tab order of this component. Indexes usually start
from 1. Zero means that default tab order should be used.
A negative value means that the field should not be
included in the tabbing sequence.Component.Focusable.getTabIndex()
protected void setInternalValue(Object newValue)
newValue
- the new value to be set.public void attach()
attach
in interface Component
attach
in class AbstractComponent
Component.attach()
public void detach()
Component
The Component.getApplication()
and Component.getWindow()
methods might
return null
after this method is called.
The caller of this method is Component.setParent(Component)
if the parent
is in the application. When the parent is detached from the application
it is its response to call Component.detach()
for all the children and to
detach itself from the terminal.
detach
in interface Component
detach
in class AbstractComponent
public boolean isRequired()
isRequired
in interface Field
true
if the field is required .otherwise
false
.public void setRequired(boolean required)
setRequired
in interface Field
required
- Is the field required.public void setRequiredError(String requiredMessage)
setRequiredError
in interface Field
requiredMessage
- Message to be shown when this field is required, but empty.public String getRequiredError()
Field
getRequiredError
in interface Field
protected boolean isEmpty()
public boolean isValidationVisible()
public void setValidationVisible(boolean validateAutomatically)
validateAutomatically
- True, if automatic validation is enabled.public void setCurrentBufferedSourceException(Buffered.SourceException currentBufferedSourceException)
currentBufferedSourceException
- protected ActionManager getActionManager()
ActionManager
used to manage the
ShortcutListener
s added to this Field
.
public void addShortcutListener(ShortcutListener shortcut)
addShortcutListener
in interface Action.ShortcutNotifier
public void removeShortcutListener(ShortcutListener shortcut)
removeShortcutListener
in interface Action.ShortcutNotifier
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |