📄 formcontrol.java
字号:
*
* @return a map of the names and values of this form control's <a href="#OutputAttributes">output attributes</a>.
*/
public final Map<String,String> getAttributesMap() {
return elementContainer.getAttributesMap();
}
/**
* Indicates whether this form control is <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-disabled">disabled</a>.
* <p>
* The form control is disabled if the attribute
* "<code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-disabled">disabled</a></code>"
* is present in its <a href="#OutputElement">output element</a>.
* <p>
* The return value is is logically equivalent to {@link #getAttributesMap()}<code>.containsKey("disabled")</code>,
* but using this property may be more efficient in some circumstances.
*
* @return <code>true</code> if this form control is <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-disabled">disabled</a>, otherwise <code>false</code>.
*/
public final boolean isDisabled() {
return elementContainer.getBooleanAttribute(Attribute.DISABLED);
}
/**
* Sets whether this form control is <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-disabled">disabled</a>.
* <p>
* If the argument supplied to this method is <code>true</code> and the <code>disabled</code> attribute is not already present
* in the output element, the full
* <a target="_blank" href="http://www.w3.org/TR/xhtml1/">XHTML</a> compatible attribute <code>disabled="disabled"</code> is added.
* If the attribute is already present, it is left unchanged.
* <p>
* If the argument supplied to this method is <code>false</code>, the attribute is removed from the output element.
* <p>
* See the {@link #isDisabled()} method for more information.
*
* @param disabled the new value of this property.
*/
public final void setDisabled(final boolean disabled) {
elementContainer.setBooleanAttribute(Attribute.DISABLED,disabled);
}
/**
* Indicates whether this form control is <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-checked">checked</a>.
* <p>
* The term <i>checked</i> is used to describe a checkbox or radio button control that is selected, which is the case if the attribute
* "<code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-checked">checked</a></code>"
* is present in its <a href="#OutputElement">output element</a>.
* <p>
* This property is only relevant to form controls with a {@linkplain #getFormControlType() type} of
* {@link FormControlType#CHECKBOX} or {@link FormControlType#RADIO}, and throws an <code>UnsupportedOperationException</code>
* for other control types.
* <p>
* Use one of the <a href="#SubmissionValueModificationMethods">submission value modification methods</a> to change the value
* of this property.
* <p>
* If this control is a checkbox, you can set it to checked by calling
* {@link #setValue(String) setValue}<code>(</code>{@link #getName()}<code>)</code>, and set it to unchecked by calling
* {@link #clearValues()}.
* <p>
* If this control is a radio button, you should use the {@link FormField#setValue(String)} method or one of the other
* higher level <a href="#SubmissionValueModificationMethods">submission value modification methods</a>
* to set the control to checked, as calling {@link #setValue(String)} method on this object
* in the same way as for a checkbox does not automatically uncheck all other radio buttons with the same name.
* Even calling {@link #clearValues()} on this object to ensure that this radio button is unchecked is not recommended, as
* it can lead to a situation where all the radio buttons with this name are unchecked.
* The <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#radio">HTML 4.01 specification of radio buttons</a>
* recommends against this situation because it is not defined how user agents should handle it, and behaviour differs amongst browsers.
* <p>
* The return value is logically equivalent to {@link #getAttributesMap()}<code>.containsKey("checked")</code>,
* but using this property may be more efficient in some circumstances.
*
* @return <code>true</code> if this form control is <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-checked">checked</a>, otherwise <code>false</code>.
* @throws UnsupportedOperationException if the {@linkplain #getFormControlType() type} of this control is not {@link FormControlType#CHECKBOX} or {@link FormControlType#RADIO}.
*/
public boolean isChecked() {
throw new UnsupportedOperationException("This property is only relevant for CHECKBOX and RADIO controls");
}
/**
* Returns the <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#initial-value">initial value</a> of this control if it has a {@linkplain FormControlType#hasPredefinedValue() predefined value}.
* <p>
* Only <a href="#PredefinedValueControl">predefined value controls</a> can return a non-<code>null</code> result.
* All other control types return <code>null</code>.
* <p>
* {@link FormControlType#CHECKBOX CHECKBOX} and {@link FormControlType#RADIO RADIO} controls have a guaranteed
* predefined value determined by the value of its compulsory
* <code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-value-INPUT">value</a></code>
* attribute. If the attribute is not present in the source document, this library assigns the control a default
* predefined value of "<code>on</code>", consistent with popular browsers.
* <p>
* {@link FormControlType#SUBMIT SUBMIT}, {@link FormControlType#BUTTON BUTTON} and {@link FormControlType#IMAGE IMAGE}
* controls have an optional predefined value determined by the value of its
* <code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-value-INPUT">value</a></code>
* attribute. This value is
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#successful-controls">successful</a>
* only in the control used to submit the form.
* <p>
* {@link FormControlType#SELECT_SINGLE} and {@link FormControlType#SELECT_MULTIPLE} controls are special cases
* because they usually contain multiple
* <code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#edef-OPTION">OPTION</a></code>
* elements, each with its own predefined value.
* In this case the {@link #getPredefinedValues()} method should be used instead, which returns a collection of all the
* control's predefined values. Attempting to call this method on a <code>SELECT</code> control results in
* a <code>java.lang.UnsupportedOperationException</code>.
* <p>
* The predefined value of a control is not affected by changes to the
* <a href="#SubmissionValue">submission value</a> of the control.
*
* @return the <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#initial-value">initial value</a> of this control if it has a {@linkplain FormControlType#hasPredefinedValue() predefined value}, or <code>null</code> if none.
*/
public String getPredefinedValue() {
return elementContainer.predefinedValue;
}
/**
* Returns a collection of all {@linkplain #getPredefinedValue() predefined values} in this control in order of appearance.
* <p>
* All objects in the returned collection are of type <code>String</code>, with no <code>null</code> entries.
* <p>
* This method is most useful for
* <code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#edef-SELECT">SELECT</a></code>
* controls since they typically contain multiple predefined values.
* In other controls it returns a collection with zero or one item based on the output of the
* {@link #getPredefinedValue()} method, so for efficiency it is recommended to use the
* {@link #getPredefinedValue()} method instead.
* <p>
* The multiple predefined values of a
* <code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#edef-SELECT">SELECT</a></code>
* control are defined by the
* <code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#edef-OPTION">OPTION</a></code>
* elements within it.
* Each <code>OPTION</code> element has an
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#initial-value">initial value</a>
* determined by the value of its
* <code><a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-value-OPTION">value</a></code>
* attribute, or if this attribute is not present, by its
* {@linkplain CharacterReference#decode(CharSequence) decoded} {@linkplain Element#getContent() content}
* text with {@linkplain CharacterReference#decodeCollapseWhiteSpace(CharSequence) collapsed white space}.
* <p>
* The predefined values of a control are not affected by changes to the
* <a href="#SubmissionValue">submission values</a> of the control.
*
* @return a collection of all {@linkplain #getPredefinedValue() predefined values} in this control in order of appearance, guaranteed not <code>null</code>.
* @see FormField#getPredefinedValues()
*/
public Collection<String> getPredefinedValues() {
if (getPredefinedValue()==null) Collections.emptySet();
return Collections.singleton(getPredefinedValue());
}
/**
* Returns a list of the control's <a href="#SubmissionValue">submission values</a> in order of appearance.
* <p>
* All objects in the returned list are of type <code>String</code>, with no <code>null</code> entries.
* <p>
* The term <i><a name="SubmissionValue">submission value</a></i> is used in this library to refer to the value the control
* would contribute to the
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#form-data-set">form data set</a>
* of a <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#submit-format">submitted</a>
* form, assuming no modification of the control's
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#current-value">current value</a> by the
* <a target="_blank" href="http://www.w3.org/TR/html401/conform.html#didx-user_agent">user agent</a> or by end user interaction.
* <p>
* For <a href="#UserValueControl">user value controls</a>, the submission value corresponds to the
* control's <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#initial-value">initial value</a>.
* <p>
* The definition of the submission value for each <a href="#PredefinedValueControl">predefined value control</a> type is as follows:
* <p>
* {@link FormControlType#CHECKBOX CHECKBOX} and {@link FormControlType#RADIO RADIO} controls
* have a submission value specified by its {@linkplain #getPredefinedValue() predefined value}
* if it is {@link #isChecked() checked}, otherwise it has no submission value.
* <p>
* {@link FormControlType#SELECT_SINGLE SELECT_SINGLE} and {@link FormControlType#SELECT_MULTIPLE SELECT_MULTIPLE} controls
* have submission values specified by the
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-value-OPTION">values</a> of the control's
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#adef-selected">selected</a>
* <code>OPTION</code> elements.
* <p>
* Only a {@link FormControlType#SELECT_MULTIPLE SELECT_MULTIPLE} control can have more than one submission value,
* all other {@linkplain FormControlType control types} return a list containing either one value or no values.
* A {@link FormControlType#SELECT_SINGLE SELECT_SINGLE} control only returns multiple submission values
* if it illegally contains multiple selected options in the source document.
* <p>
* {@link FormControlType#SUBMIT SUBMIT}, {@link FormControlType#BUTTON BUTTON}, and {@link FormControlType#IMAGE IMAGE}
* controls are only ever
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#successful-controls">successful</a>
* when they are activated by the user to
* <a target="_blank" href="http://www.w3.org/TR/html401/interact/forms.html#submit-format">submit</a> the form.
* Because the submission value is intended to be a static representation of a control's data without
* interaction by the user, this library never associates submission values with
* {@linkplain FormControlType#isSubmit() submit} buttons, so this method always returns an empty list for these
* control types.
* <p>
* The <a href="#SubmissionValue">submission value(s)</a> of a control can be modified for subsequent output in
* an {@link OutputDocument} using the various
* <i><a name="SubmissionValueModificationMethods">submission value modification methods</a></i>, namely:<br />
* {@link FormField#setValue(String)}<br />
* {@link FormField#addValue(String)}<br />
* {@link FormField#setValues(Collection)}<br />
* {@link FormField#clearValues()}<br />
* {@link FormFields#setValue(String fieldName, String value)}<br />
* {@link FormFields#addValue(String fieldName, String value)}<br />
* {@link FormFields#setDataSet(Map)}<br />
* {@link FormFields#clearValues()}<br />
* {@link #setValue(String) FormControl.setValue(String)}<br />
* {@link #addValue(String) FormControl.addValue(String)}<br />
* {@link #clearValues() FormControl.clearValues()}<br />
* <p>
* The values returned by this method reflect any changes made using the submission value modification methods,
* in contrast to methods found in the {@link Attributes} and {@link Attribute} classes, which always reflect the source document.
*
* @return a list of the control's <i>submission values</i> in order of appearance, guaranteed not <code>null</code>.
* @see #getPredefinedValues()
*/
public List<String> getValues() {
final List<String> values=new ArrayList<String>();
addValuesTo(values);
return values;
}
/**
* Clears the control's existing <a href="#SubmissionValue">submission values</a>.
* <p>
* This is equivalent to {@link #setValue(String) setValue(null)}.
* <p>
* NOTE: The {@link FormFields} and {@link FormField} classes provide a more appropriate abstraction level for the modification of form control submission values.
*
* @see FormFields#clearValues()
* @see FormField#clearValues()
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -