📄 formcontrol.java
字号:
public String[] getOptionValues() { return _selectionOptions.getValues(); } public String[] getDisplayedOptions() { return _selectionOptions.getDisplayedText(); } /** * Returns true if a single control can have multiple values. **/ public boolean isMultiValued() { return _multiSelect; } class Scriptable extends FormControl.Scriptable { public Object get( String propertyName ) { if (propertyName.equalsIgnoreCase( "options" )) { return _selectionOptions; } else if (propertyName.equalsIgnoreCase( "length" )) { return new Integer( getOptionValues().length ); } else if (propertyName.equalsIgnoreCase( "value" )) { return getSelectedValue(); } else if (propertyName.equalsIgnoreCase( "selectedIndex" )) { return new Integer( _selectionOptions.getFirstSelectedIndex() ); } else { return super.get( propertyName ); } } public Object get(int index) { return _selectionOptions.get( index ); } private String getSelectedValue() { String[] values = getValues(); return (values.length == 0 ? "" : values[0] ); } public void set( String propertyName, Object value ) { if (propertyName.equalsIgnoreCase( "value" )) { ArrayList values = new ArrayList(); values.add( value ); _selectionOptions.claimUniqueValues( values ); } else if (propertyName.equalsIgnoreCase( "selectedIndex" )) { if (!(value instanceof Number)) throw new RuntimeException( "selectedIndex must be set to an integer" ); _selectionOptions.setSelectedIndex( ((Number) value).intValue() ); } else { super.set( propertyName, value ); } } } protected ScriptableDelegate newScriptable() { return new Scriptable(); } void updateRequiredParameters( Hashtable required ) { if (isReadOnly()) required.put( getName(), getValues() ); } void addValues( ParameterProcessor processor, String characterSet ) throws IOException { if (isDisabled()) return; for (int i = 0; i < getValues().length; i++) { processor.addParameter( getName(), getValues()[i], characterSet ); } } void claimUniqueValue( List values ) { boolean changed = _selectionOptions.claimUniqueValues( values ); if (changed) sendOnChangeEvent(); } final void reset() { _selectionOptions.reset(); } static class Option extends ScriptableDelegate implements SelectionOption { private String _text; private String _value; private boolean _defaultSelected; private boolean _selected; private int _index; private Options _container; Option() { } Option( String text, String value, boolean selected ) { _text = text; _value = value; _defaultSelected = _selected = selected; } void reset() { _selected = _defaultSelected; } void addValueIfSelected( List list ) { if (_selected) list.add( _value ); } void setIndex( Options container, int index ) { _container = container; _index = index; } //------------------------- SelectionOption methods ------------------------------ public void initialize( String text, String value, boolean defaultSelected, boolean selected ) { _text = text; _value = value; _defaultSelected = defaultSelected; _selected = selected; } public int getIndex() { return _index; } public String getText() { return _text; } public void setText( String text ) { _text = text; } public String getValue() { return _value; } public void setValue( String value ) { _value = value; } public boolean isDefaultSelected() { return _defaultSelected; } public void setSelected( boolean selected ) { _selected = selected; if (selected) _container.optionSet( _index ); } public boolean isSelected() { return _selected; } } abstract class Options extends ScriptableDelegate implements SelectionOptions { private Option[] _options; Options( Node selectionNode ) { NodeList nl = ((Element) selectionNode).getElementsByTagName( "option" ); _options = new Option[ nl.getLength() ]; for (int i = 0; i < _options.length; i++) { final String displayedText = getValue( nl.item(i).getFirstChild() ).trim(); _options[i] = new Option( displayedText, getOptionValue( nl.item(i), displayedText ), nl.item(i).getAttributes().getNamedItem( "selected" ) != null ); _options[i].setIndex( this, i ); } } boolean claimUniqueValues( List values ) { return claimUniqueValues( values, _options ); } protected abstract boolean claimUniqueValues( List values, Option[] options ); final protected void reportNoMatches( List values ) { if (!_listBox) throw new IllegalParameterValueException( getName(), (String) values.get(0), getOptionValues() ); } String[] getSelectedValues() { ArrayList list = new ArrayList(); for (int i = 0; i < _options.length; i++) { _options[i].addValueIfSelected( list ); } if (!_listBox && list.isEmpty() && _options.length > 0) list.add( _options[0].getValue() ); return (String[]) list.toArray( new String[ list.size() ] ); } void reset() { for (int i = 0; i < _options.length; i++) { _options[i].reset(); } } String[] getDisplayedText() { String[] displayedText = new String[ _options.length ]; for (int i = 0; i < displayedText.length; i++) displayedText[i] = _options[i].getText(); return displayedText; } String[] getValues() { String[] values = new String[ _options.length ]; for (int i = 0; i < values.length; i++) values[i] = _options[i].getValue(); return values; } /** * Selects the matching item and deselects the others. **/ void setSelectedIndex( int index ) { for (int i = 0; i < _options.length; i++) { _options[ i ]._selected = (i == index); } } /** * Returns the index of the first item selected, or -1 if none is selected. */ int getFirstSelectedIndex() { for (int i = 0; i < _options.length; i++) { if (_options[i].isSelected()) return i; } return noOptionSelectedIndex(); } protected abstract int noOptionSelectedIndex(); public int getLength() { return _options.length; } public void setLength( int length ) { if (length < 0 || length >= _options.length) return; Option[] newArray = new Option[ length ]; System.arraycopy( _options, 0, newArray, 0, length ); _options = newArray; } public void put( int i, SelectionOption option ) { if (i < 0) return; if (option == null) { if (i >= _options.length) return; deleteOptionsEntry( i ); } else { if (i >= _options.length) { i = _options.length; expandOptionsArray(); } _options[i] = (Option) option; _options[i].setIndex( this, i ); if (option.isSelected()) ensureUniqueOption( _options, i); } } protected abstract void ensureUniqueOption( Option[] options, int i ); private void deleteOptionsEntry( int i ) { Option[] newArray = new Option[ _options.length-1 ]; System.arraycopy( _options, 0, newArray, 0, i ); System.arraycopy( _options, i+1, newArray, i, newArray.length - i ); _options = newArray; } private void expandOptionsArray() { Option[] newArray = new Option[ _options.length+1 ]; System.arraycopy( _options, 0, newArray, 0, _options.length ); _options = newArray; } public Object get( int index ) { return _options[ index ]; } /** Invoked when an option is set true. **/ void optionSet( int i ) { ensureUniqueOption( _options, i); } private String getOptionValue( Node optionNode, String displayedText ) { NamedNodeMap nnm = optionNode.getAttributes(); if (nnm.getNamedItem( "value" ) != null) { return getValue( nnm.getNamedItem( "value" ) ); } else { return displayedText; } } private String getValue( Node node ) { return (node == null) ? "" : emptyIfNull( node.getNodeValue() ); } private String emptyIfNull( String value ) { return (value == null) ? "" : value; } } class SingleSelectOptions extends Options { public SingleSelectOptions( Node selectionNode ) { super( selectionNode ); } protected void ensureUniqueOption( Option[] options, int i ) { for (int j = 0; j < options.length; j++) { options[j]._selected = (i == j); } } protected int noOptionSelectedIndex() { return 0; } protected boolean claimUniqueValues( List values, Option[] options ) { boolean changed = false; for (int i = 0; i < values.size(); i++) { String value = (String) values.get( i ); for (int j = 0; j < options.length; j++) { boolean selected = value.equals( options[j].getValue() ); if (selected != options[j].isSelected()) changed = true; options[j].setSelected( selected ); if (selected) { values.remove( value ); for (++j; j < options.length; j++) options[j].setSelected( false ); return changed; } } } reportNoMatches( values ); return changed; } } class MultiSelectOptions extends Options { public MultiSelectOptions( Node selectionNode ) { super( selectionNode ); } protected void ensureUniqueOption( Option[] options, int i ) {} protected int noOptionSelectedIndex() { return -1; } protected boolean claimUniqueValues( List values, Option[] options ) { boolean changed = false; for (int i = 0; i < options.length; i++) { final boolean newValue = values.contains( options[i].getValue() ); if (newValue != options[i].isSelected()) changed = true; options[i].setSelected( newValue ); if (newValue) values.remove( options[i].getValue() ); } return changed; } }}//============================= exception class IllegalParameterValueException ======================================/** * This exception is thrown on an attempt to set a parameter to a value not permitted to it by the form. **/class IllegalParameterValueException extends IllegalRequestParameterException { IllegalParameterValueException( String parameterName, String badValue, String[] allowed ) { _parameterName = parameterName; _badValue = badValue; _allowedValues = allowed; } public String getMessage() { StringBuffer sb = new StringBuffer(HttpUnitUtils.DEFAULT_TEXT_BUFFER_SIZE); sb.append( "May not set parameter '" ).append( _parameterName ).append( "' to '" ); sb.append( _badValue ).append( "'. Value must be one of: { " ); for (int i = 0; i < _allowedValues.length; i++) { if (i != 0) sb.append( ", " ); sb.append( _allowedValues[i] ); } sb.append( " }" ); return sb.toString(); } private String _parameterName; private String _badValue; private String[] _allowedValues;}//============================= exception class MissingParameterValueException ======================================/** * This exception is thrown on an attempt to remove a required value from a form parameter. **/class MissingParameterValueException extends IllegalRequestParameterException { MissingParameterValueException( String parameterName, String missingValue, String[] proposed ) { _parameterName = parameterName; _missingValue = missingValue; _proposedValues = proposed; } public String getMessage() { StringBuffer sb = new StringBuffer(HttpUnitUtils.DEFAULT_TEXT_BUFFER_SIZE); sb.append( "Parameter '" ).append( _parameterName ).append( "' must have the value '" ); sb.append( _missingValue ).append( "'. Attempted to set it to: { " ); for (int i = 0; i < _proposedValues.length; i++) { if (i != 0) sb.append( ", " ); sb.append( _proposedValues[i] ); } sb.append( " }" ); return sb.toString(); } private String _parameterName; private String _missingValue; private String[] _proposedValues;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -