T
- The model object typepublic abstract class FormComponent<T> extends LabeledWebMarkupContainer implements IFormVisitorParticipant, IFormModelUpdateListener, IGenericComponent<T,FormComponent<T>>
FormComponents are not versioned by default. If you need versioning for your FormComponents, you will need to call Form.setVersioned(true), which will set versioning on for the form and all form component children.
If this component is required and that fails, the error key that is used is the "Required"; if
the type conversion fails, it will use the key "IConverter" if the conversion failed in a
converter, or "ConversionError" if type was explicitly specified via setType(Class)
or a
IPropertyReflectionAwareModel
was used. Notice that both "IConverter" and
"ConversionError" have a more specific variant of "key.classname" where classname is the type
that we failed to convert to. Classname is not full qualified, so only the actual name of the
class is used.
Property expressions that can be used in error messages are:
Modifier and Type | Field and Description |
---|---|
protected static short |
FLAG_CONVERT_EMPTY_INPUT_STRING_TO_NULL
Make empty strings null values boolean.
|
static String |
VALUE_SEPARATOR
The value separator
|
ENABLE, FLAG_INITIALIZED, FLAG_RESERVED1, FLAG_RESERVED2, FLAG_RESERVED3, FLAG_RESERVED4, FLAG_RESERVED5, FLAG_RESERVED8, PARENT_PATH, PATH_SEPARATOR, RENDER, RFLAG_CONTAINER_DEQUEING
Constructor and Description |
---|
FormComponent(String id) |
FormComponent(String id,
IModel<T> model) |
Modifier and Type | Method and Description |
---|---|
FormComponent<T> |
add(IValidator<? super T>... validators)
Adds a validator to this form component.
|
FormComponent<T> |
add(IValidator<? super T> validator)
Adds a validator to this form component
|
boolean |
checkRequired()
Checks if the form component's 'required' requirement is met by first checking
isRequired() to see if it has to check for requirement. |
void |
clearInput()
Clears the user input.
|
void |
convertInput()
Converts and validates the conversion of the raw input string into the object specified by
getType() and records any thrown ConversionException s. |
protected T |
convertValue(String[] value)
Subclasses should overwrite this if the conversion is not done through the type field and the
IConverter . |
void |
error(IValidationError error)
Reports a validation error against this form component.
|
T |
getConvertedInput()
Gets the converted input.
|
String |
getDefaultLabel()
Gets the string the component would use as a label when one was requested but no label model
was set via
LabeledWebMarkupContainer.getLabel() . |
String |
getDefaultLabel(String defaultValue)
Gets the string the component would use as a label when one was requested but no label model
was set via
LabeledWebMarkupContainer.getLabel() . |
Form<?> |
getForm() |
String |
getInput()
Gets the request parameter for this component as a string.
|
String[] |
getInputAsArray()
Gets the request parameters for this component as strings.
|
String |
getInputName()
Gets the string to be used for the name attribute of the form element.
|
protected String |
getModelValue() |
protected List<org.apache.wicket.util.string.StringValue> |
getParameterValues(String inputName)
Reads the value(s) of the request parameter with name inputName
from either the query parameters for GET method or the request body
for POST method.
|
String |
getRawInput()
Use hasRawInput() to check if this component has raw input because null can mean 2 things: It
doesn't have rawinput or the rawinput is really null.
|
Class<T> |
getType() |
String |
getValidatorKeyPrefix() |
List<IValidator<? super T>> |
getValidators()
Gets an unmodifiable list of validators for this FormComponent.
|
String |
getValue()
Gets current value for a form component, which can be either input data entered by the user,
or the component's model object if no input was provided.
|
boolean |
hasRawInput()
Returns whether this component has raw input.
|
protected int |
inputAsInt()
Gets the request parameter for this component as an int.
|
protected int |
inputAsInt(int defaultValue)
Gets the request parameter for this component as an int, using the given default in case no
corresponding request parameter was found.
|
protected int[] |
inputAsIntArray()
Gets the request parameters for this component as ints.
|
void |
inputChanged()
Used by Form to tell the FormComponent that a new user input is available
|
protected void |
internalOnModelChanged()
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API.
|
void |
invalid()
Indicate that validation of this form component failed.
|
boolean |
isInputNullable()
Gets whether this component's input can be null.
|
boolean |
isMultiPart() |
boolean |
isRequired() |
boolean |
isValid()
Gets whether this component is 'valid'.
|
IValidatable<T> |
newValidatable()
Creates an IValidatable that can be used to validate this form component.
|
protected ValidationError |
newValidationError(org.apache.wicket.util.convert.ConversionException cause)
This method is called, when the validation triggered by
convertInput()
failed with a ConversionException , to construct a ValidationError based on
the exception. |
protected void |
onComponentTag(ComponentTag tag)
Processes the component tag.
|
protected void |
onDetach()
Sets the temporary converted input value to null.
|
protected void |
onDisabled(ComponentTag tag)
Called by
onComponentTag(ComponentTag) when the component is disabled. |
protected void |
onInvalid()
Handle invalidation
|
protected void |
onRequired(ComponentTag tag)
Deprecated.
|
protected void |
onValid()
Handle validation
|
boolean |
processChildren()
Should children be traversed during visiting or should only the siblings be processed.
|
void |
processInput()
This method will retrieve the request parameter, validate it, and if valid update the model.
|
FormComponent<T> |
remove(IValidator<? super T> validator)
Removes a validator from the form component.
|
protected void |
reportRequiredError()
Reports required error against this component
|
void |
setConvertedInput(T convertedInput)
Sets the converted input.
|
FormComponent<T> |
setLabel(IModel<String> labelModel)
The value will be made available to the validator property by means of ${label}.
|
void |
setModelValue(String[] value)
Sets the value for a form component.
|
FormComponent<T> |
setRequired(boolean required)
Sets the required flag
|
FormComponent<T> |
setType(Class<?> type)
Sets the type that will be used when updating the model for this component.
|
protected boolean |
shouldTrimInput()
Determines whether or not this component should trim its input prior to processing it.
|
protected String |
trim(String string)
Trims the input according to
shouldTrimInput() |
void |
updateAutoLabels(AjaxRequestTarget target)
Updates auto label css classes such as error/required during ajax updates when the labels may
not be directly repainted in the response.
|
static <S> void |
updateCollectionModel(FormComponent<Collection<S>> formComponent)
Update the model of a
FormComponent containing a Collection . |
void |
updateModel()
Updates this components model from the request, it expects that the object is already
converted through the convertInput() call that is called by the validate() method when a form
is being processed.
|
void |
valid()
Called to indicate that the user input is valid.
|
void |
validate()
Performs full validation of the form component, which consists of calling validateRequired(),
convertInput(), and validateValidators().
|
protected void |
validateRequired()
Checks if the raw input value is not null if this component is required.
|
protected void |
validateValidators()
Validates this component using the component's validators.
|
static <R> R |
visitComponentsPostOrder(Component component,
org.apache.wicket.util.visit.IVisitor<Component,R> visitor)
Visits any form components inside component if it is a container, or component itself if it
is itself a form component
|
static <R> R |
visitFormComponentsPostOrder(Component component,
org.apache.wicket.util.visit.IVisitor<? extends FormComponent<?>,R> visitor)
Visits any form components inside component if it is a container, or component itself if it
is itself a form component
|
getLabel
getWebApplication, getWebPage, getWebRequest, getWebResponse, getWebSession
add, addDequeuedComponent, addOrReplace, autoAdd, canDequeueTag, contains, dequeue, dequeue, dequeuePreamble, findChildComponent, findComponentToDequeue, get, getAssociatedMarkup, getAssociatedMarkupStream, getMarkup, getMarkupType, getRegionMarkup, internalAdd, internalInitialize, iterator, iterator, newDequeueContext, onComponentTagBody, onInitialize, onRender, queue, remove, remove, removeAll, renderAll, renderAssociatedMarkup, renderNext, replace, setDefaultModel, size, stream, streamChildren, toString, toString, visitChildren, visitChildren
add, addStateChange, beforeRender, canCallListener, canCallListenerAfterExpiry, checkComponentTag, checkComponentTagAttribute, checkHierarchyChange, clearOriginalDestination, configure, continueToOriginalDestination, createConverter, debug, detach, detachModel, detachModels, determineVisibility, error, exceptionMessage, fatal, findMarkupStream, findPage, findParent, findParentWithAssociatedMarkup, getAjaxRegionMarkupId, getApplication, getBehaviorById, getBehaviorId, getBehaviors, getBehaviors, getClassRelativePath, getConverter, getDefaultModel, getDefaultModelObject, getDefaultModelObjectAsString, getDefaultModelObjectAsString, getEscapeModelStrings, getFeedbackMessages, getFlag, getId, getInnermostModel, getInnermostModel, getLocale, getLocalizer, getMarkup, getMarkupAttributes, getMarkupId, getMarkupId, getMarkupIdFromMarkup, getMarkupIdImpl, getMarkupSourcingStrategy, getMetaData, getModelComparator, getOutputMarkupId, getOutputMarkupPlaceholderTag, getPage, getPageRelativePath, getParent, getPath, getRenderBodyOnly, getRequest, getRequestCycle, getRequestFlag, getResponse, getSession, getSizeInBytes, getStatelessHint, getString, getString, getString, getStyle, getVariation, hasBeenRendered, hasErrorMessage, hasFeedbackMessage, info, initModel, internalRenderComponent, internalRenderHead, isActionAuthorized, isAuto, isBehaviorAccepted, isEnableAllowed, isEnabled, isEnabledInHierarchy, isIgnoreAttributeModifier, isInitialized, isRenderAllowed, isRendering, isStateless, isVersioned, isVisibilityAllowed, isVisible, isVisibleInHierarchy, markRendering, modelChanged, modelChanging, newMarkupSourcingStrategy, onAfterRender, onBeforeRender, onConfigure, onEvent, onModelChanged, onModelChanging, onReAdd, onRemove, redirectToInterceptPage, remove, remove, render, renderComponentTag, rendered, renderHead, renderPart, renderPlaceholderTag, replaceComponentTagBody, replaceWith, sameInnermostModel, sameInnermostModel, send, setAuto, setDefaultModelObject, setEnabled, setEscapeModelStrings, setFlag, setIgnoreAttributeModifier, setMarkup, setMarkupId, setMarkupIdImpl, setMetaData, setOutputMarkupId, setOutputMarkupPlaceholderTag, setParent, setRenderBodyOnly, setResponsePage, setResponsePage, setResponsePage, setVersioned, setVisibilityAllowed, setVisible, success, urlFor, urlFor, urlFor, urlForListener, urlForListener, visitParents, visitParents, warn, wrap
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getDefaultModel, getDefaultModelObject, getModel, getModelObject, setDefaultModel, setDefaultModelObject, setModel, setModelObject
forEach, spliterator
public static final String VALUE_SEPARATOR
protected static final short FLAG_CONVERT_EMPTY_INPUT_STRING_TO_NULL
public FormComponent(String id)
Component.Component(String)
public FormComponent(String id, IModel<T> model)
id
- model
- Component.Component(String, IModel)
public static <R> R visitFormComponentsPostOrder(Component component, org.apache.wicket.util.visit.IVisitor<? extends FormComponent<?>,R> visitor)
R
- the type of the visitor's resultcomponent
- starting point of the traversalvisitor
- The visitor to callpublic static <R> R visitComponentsPostOrder(Component component, org.apache.wicket.util.visit.IVisitor<Component,R> visitor)
R
- the type of the visitor's resultcomponent
- starting point of the traversalvisitor
- The visitor to callpublic final String getDefaultLabel()
LabeledWebMarkupContainer.getLabel()
. The value of this string is usually set in a property file;
if the value is not set the default value equivalent to component id will be returned.public final String getDefaultLabel(String defaultValue)
LabeledWebMarkupContainer.getLabel()
. The value of this string is usually set in a property file;
if the value is not set the defaultValue
will be returned.defaultValue
- public final FormComponent<T> add(IValidator<? super T> validator)
validator
- validator to be addedthis
for chainingIllegalArgumentException
- if validator is nullIValidator
public final FormComponent<T> remove(IValidator<? super T> validator)
validator
- validatorIllegalArgumentException
- if validator is null or not foundIValidator
,
add(IValidator)
public final FormComponent<T> add(IValidator<? super T>... validators)
validators
- The validator(s) to be addedIllegalArgumentException
- if validator is nullIValidator
public boolean checkRequired()
isRequired()
to see if it has to check for requirement. If that is true then by
default it checks if the input is null or an empty String
Strings.isEmpty(CharSequence)
Subclasses that overwrite this method should also call isRequired()
first.
Strings.isEmpty(CharSequence)
,
isInputNullable()
public void clearInput()
public void error(IValidationError error)
ValidationErrorFeedback
object that holds
both the validation error and the generated error message - so a custom feedback panel can
have access to both.error
- validation errorpublic final T getConvertedInput()
convertInput()
.
FormComponentPanel
often access this method when constructing their converted input
value which is often the combination of converted values of the embedded FormComponents
To access the model object resulted by the full form processing, use
IGenericComponent.getModelObject()
instead, that is an generified version of
Component.getDefaultModelObject()
public final void setConvertedInput(T convertedInput)
convertInput()
, in which case they should call this method to update the
input for this component instance.convertedInput
- the converted inputpublic Form<?> getForm()
public String getInput()
public String[] getInputAsArray()
protected List<org.apache.wicket.util.string.StringValue> getParameterValues(String inputName)
inputName
- The name of the request parameterpublic String getInputName()
public final String getRawInput()
public final Class<T> getType()
public String getValidatorKeyPrefix()
Form.getValidatorKeyPrefix()
public final List<IValidator<? super T>> getValidators()
public final String getValue()
public final boolean hasRawInput()
public final void inputChanged()
public final void invalid()
public boolean isInputNullable()
disabled="disabled"
set.public boolean isMultiPart()
public boolean isRequired()
public final boolean isValid()
public boolean processChildren()
IFormVisitorParticipant
processChildren
in interface IFormVisitorParticipant
IFormVisitorParticipant.processChildren()
public final void processInput()
public FormComponent<T> setLabel(IModel<String> labelModel)
setLabel
in class LabeledWebMarkupContainer
labelModel
- public void setModelValue(String[] value)
value
- The valuepublic final FormComponent<T> setRequired(boolean required)
required
- public FormComponent<T> setType(Class<?> type)
type
- public void updateModel()
setModelObject(getConvertedInput());DO NOT CALL THIS METHOD DIRECTLY UNLESS YOU ARE SURE WHAT YOU ARE DOING. USUALLY UPDATING YOUR MODEL IS HANDLED BY THE FORM, NOT DIRECTLY BY YOU.
updateModel
in interface IFormModelUpdateListener
public final void valid()
public void validate()
public void convertInput()
getType()
and records any thrown ConversionException
s.
Converted value is available through getConvertedInput()
.
Usually the user should do custom conversions by specifying an IConverter
by
registering it with the application by overriding Application.getConverterLocator()
,
or at the component level by overriding Component.getConverter(Class)
.
IConverterLocator
,
Application.newConverterLocator()
,
IConverter.convertToObject(String, Locale)
,
newValidationError(ConversionException)
protected ValidationError newValidationError(org.apache.wicket.util.convert.ConversionException cause)
convertInput()
failed with a ConversionException
, to construct a ValidationError
based on
the exception.
Override this method to modify the ValidationError object, e.g. add a custom variable for message substitution:
new FormComponent<T>(id) { protected ValidationError newValidationError(ConversionException cause) { return super.newValidationError(cause).setVariable("foo", foovalue); } };
cause
- the original causeValidationError
protected T convertValue(String[] value) throws org.apache.wicket.util.convert.ConversionException
IConverter
. WARNING: this method may be removed in future versions.
If conversion fails then a ConversionException should be thrownvalue
- The value can be the getInput() or through a cookieorg.apache.wicket.util.convert.ConversionException
- If input can't be convertedprotected String getModelValue()
protected final int inputAsInt()
protected final int inputAsInt(int defaultValue)
defaultValue
- Default value to return if request does not have an integer for this componentprotected final int[] inputAsIntArray()
protected void internalOnModelChanged()
Component
Called anytime a model is changed via setModel or setModelObject.
internalOnModelChanged
in class Component
Component.internalOnModelChanged()
protected void onComponentTag(ComponentTag tag)
onComponentTag
in class Component
tag
- Tag to modifyComponent.onComponentTag(ComponentTag)
protected void onDetach()
onDetach
in class LabeledWebMarkupContainer
Component.onDetach()
protected void onDisabled(ComponentTag tag)
onComponentTag(ComponentTag)
when the component is disabled. By default,
this method will add a disabled="disabled" attribute to the tag. Components may override this
method to tweak the tag as they think is fit.tag
- the tag that is being rendered@Deprecated protected void onRequired(ComponentTag tag)
onComponentTag(ComponentTag)
when the component is required.tag
- the tag that is being renderedprotected void onInvalid()
protected void onValid()
protected boolean shouldTrimInput()
true
protected String trim(String string)
shouldTrimInput()
string
- shouldTrimInput()
returns true, unchanged input otherwiseprotected final void validateRequired()
protected void reportRequiredError()
protected final void validateValidators()
public final IValidatable<T> newValidatable()
public final void updateAutoLabels(AjaxRequestTarget target)
target
- public static <S> void updateCollectionModel(FormComponent<Collection<S>> formComponent)
FormComponent
containing a Collection
.
If the model object does not yet exists, a new suitable collection is filled with the converted
input and used as the new model object. Otherwise the existing collection is modified
in-place, then IModel.setObject(Object)
is called with the same instance: it allows
the Model to be notified of changes even when Model.getObject()
returns a different
Collection
at every invocation.S
- collection typeformComponent
- the form component to updateWicketRuntimeException
- if the existing model object collection is unmodifiable and no setter existsupdateModel()
Copyright © 2006–2020 Apache Software Foundation. All rights reserved.