henning 2003/07/18 01:32:30 Modified: src/dtd intake.dtd xdocs changes.xml xdocs/services intake-service.xml src/java/org/apache/turbine/services/intake/model BigDecimalField.java BooleanField.java ComboKeyField.java DateStringField.java DoubleField.java Field.java FileItemField.java FloatField.java IntegerField.java LongField.java ShortField.java StringField.java StringKeyField.java src/java/org/apache/turbine/services/intake/xmlmodel XmlField.java Log: Add an "emptyValue" field to the Field classes, which makes it possible to determine, which value should a field have that is either empty or not returned in the form parameters. It can be set on a field base in the intake.xml files. Contains even documentation. Revision Changes Path 1.8 +7 -1 jakarta-turbine-2/src/dtd/intake.dtd Index: intake.dtd =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/dtd/intake.dtd,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- intake.dtd 19 Jun 2003 16:04:26 -0000 1.7 +++ intake.dtd 18 Jul 2003 08:32:29 -0000 1.8 @@ -106,6 +106,11 @@ Default: null +emptyValue: Value to be used for the value of the field if it is not + supplied by the parameters returned from an input form. + + Default: null + multiValued: If this is true, the field will accept multiple values. Otherwise, the field only accepts a single vale. @@ -169,6 +174,7 @@ mapToProperty CDATA #IMPLIED validator CDATA #IMPLIED defaultValue CDATA #IMPLIED + emptyValue CDATA #IMPLIED > <!-- 1.58 +4 -0 jakarta-turbine-2/xdocs/changes.xml Index: changes.xml =================================================================== RCS file: /home/cvs/jakarta-turbine-2/xdocs/changes.xml,v retrieving revision 1.57 retrieving revision 1.58 diff -u -r1.57 -r1.58 --- changes.xml 15 Jul 2003 09:07:32 -0000 1.57 +++ changes.xml 18 Jul 2003 08:32:29 -0000 1.58 @@ -429,6 +429,10 @@ not only the velocity internal stack trace. You can switch this behaviour off by setting "services.VelocityService.catch.errors" to off or false. </li> + <li> + Intake can now assign "empty" values to fields which are not returned or left out by the browser. This + is useful if you want your string fields not to map to null if the user does not enter anything. + </li> </ul> </p> </subsection> 1.7 +24 -3 jakarta-turbine-2/xdocs/services/intake-service.xml Index: intake-service.xml =================================================================== RCS file: /home/cvs/jakarta-turbine-2/xdocs/services/intake-service.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- intake-service.xml 9 Oct 2001 14:44:39 -0000 1.6 +++ intake-service.xml 18 Jul 2003 08:32:29 -0000 1.7 @@ -853,8 +853,8 @@ <section name="Default Values for fields"> <p> -If you want to use input fields which should default to non-empty values, -you can use the defaultValue field: +If you want to use input fields which should default to non-empty values for, +new objects, you can use the defaultValue field: </p> <source><![CDATA[ @@ -864,7 +864,7 @@ </group> ]]></source> -If you set up a form like this: +<p>If you set up a form like this:</p> <source><![CDATA[ #if($!dz) @@ -885,6 +885,27 @@ </p> </section> + +<section name="Empty fields"> +<p> +Sometimes you have form fields which are not required (can be left +empty) but should be mapped onto a non null value in your bean. This +is especially true if you use string fields in conjunction with +"required" columns in a database. For this case, you can preset an +"empty" value for each field which is used if a field is missing or +empty in the form parameters returned by the browser. If you don't set +this, the default is "null". +</p> + +<source><![CDATA[ +<group name="test" key="test"> + <field name="Value" key="val" type="String" emptyValue=""/> +</group> +]]></source> + +<p>This would return the empty String (not a null value) for the "val" field +if the user does not enter anything. Without the emptyValue parameter, intake +would assign the null value to the bean field.</p> </body> 1.10 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java Index: BigDecimalField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- BigDecimalField.java 19 Jun 2003 14:56:30 -0000 1.9 +++ BigDecimalField.java 18 Jul 2003 08:32:29 -0000 1.10 @@ -105,6 +105,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new BigDecimal(prop); + } + + /** * A suitable validator. * * @return A suitable validator @@ -126,14 +146,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? canonicalizeDecimalInput(inputs[i]) : null; + ? canonicalizeDecimalInput(inputs[i]) : (BigDecimal) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? canonicalizeDecimalInput(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? canonicalizeDecimalInput(val) : (BigDecimal) getEmptyValue()); } } 1.10 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/BooleanField.java Index: BooleanField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/BooleanField.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- BooleanField.java 18 Jul 2003 08:16:45 -0000 1.9 +++ BooleanField.java 18 Jul 2003 08:32:29 -0000 1.10 @@ -103,6 +103,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new Boolean(prop); + } + + /** * A suitable validator. * * @return class name of the validator @@ -124,14 +144,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? getBoolean(inputs[i]) : null; + ? getBoolean(inputs[i]) : (Boolean) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? getBoolean(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? getBoolean(val) : (Boolean) getEmptyValue()); } } 1.11 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/ComboKeyField.java Index: ComboKeyField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/ComboKeyField.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- ComboKeyField.java 19 Jun 2003 14:58:49 -0000 1.10 +++ ComboKeyField.java 18 Jul 2003 08:32:29 -0000 1.11 @@ -101,6 +101,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new ComboKey(prop); + } + + /** * Sets the value of the field from data in the parser. */ protected void doSetValue() @@ -112,14 +132,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? new ComboKey(inputs[i]) : null; + ? new ComboKey(inputs[i]) : (ComboKey) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? new ComboKey(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? new ComboKey(val) : (ComboKey) getEmptyValue()); } } } 1.9 +32 -4 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/DateStringField.java Index: DateStringField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/DateStringField.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- DateStringField.java 19 Jun 2003 14:58:49 -0000 1.8 +++ DateStringField.java 18 Jul 2003 08:32:30 -0000 1.9 @@ -122,7 +122,35 @@ catch (ParseException e) { throw new TurbineRuntimeException("Could not parse " + prop - + " into a valid Date", e); + + " into a valid Date for the default value", e); + } + } + + /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + try + { + emptyValue = getDate(prop); + } + catch (ParseException e) + { + throw new TurbineRuntimeException("Could not parse " + prop + + " into a valid Date for the empty value", e); } } @@ -150,7 +178,7 @@ try { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? getDate(inputs[i]) : null; + ? getDate(inputs[i]) : (Date) getEmptyValue(); } catch (ParseException e) { @@ -164,7 +192,7 @@ String val = parser.getString(getKey()); try { - setTestValue(StringUtils.isNotEmpty(val) ? getDate(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? getDate(val) : (Date) getEmptyValue()); } catch (ParseException e) { 1.7 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/DoubleField.java Index: DoubleField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/DoubleField.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DoubleField.java 19 Jun 2003 14:56:30 -0000 1.6 +++ DoubleField.java 18 Jul 2003 08:32:30 -0000 1.7 @@ -100,6 +100,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new Double(prop); + } + + /** * A suitable validator. * * @return A suitable validator @@ -121,14 +141,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? new Double(inputs[i]) : null; + ? new Double(inputs[i]) : (Double) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? new Double(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? new Double(val) : (Double) getEmptyValue()); } } } 1.13 +28 -2 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/Field.java Index: Field.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/Field.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- Field.java 15 Jul 2003 10:15:18 -0000 1.12 +++ Field.java 18 Jul 2003 08:32:30 -0000 1.13 @@ -144,6 +144,9 @@ /** Default value of the field */ protected Object defaultValue; + /** Value of the field to use if the mapped parameter is empty or non-existant */ + protected Object emptyValue; + /** Display size of the field */ private String displaySize; @@ -674,11 +677,24 @@ } /** - * Set the default Value. + * Set the default Value. This value is used if + * Intake should map this field to a new object. + * + * @param prop The value to use if the field is mapped to a new object. */ public abstract void setDefaultValue(String prop); /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public abstract void setEmptyValue(String prop); + + /** * @deprecated Use doSetValue() instead (with no parameters). */ protected void doSetValue(ValueParser pp) @@ -928,6 +944,16 @@ public Object getDefaultValue() { return defaultValue; + } + + /** + * Get the Value to use if the field is empty + * + * @return the value to use if the field is empty. + */ + public Object getEmptyValue() + { + return emptyValue; } /** 1.13 +21 -1 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/FileItemField.java Index: FileItemField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/FileItemField.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- FileItemField.java 9 May 2003 11:09:52 -0000 1.12 +++ FileItemField.java 18 Jul 2003 08:32:30 -0000 1.13 @@ -108,6 +108,26 @@ } /** + * It is not possible to set the empty value for this field type. + * Calling this method with a non-null parameter will result in a + * TurbineRuntimeException + * + * @param prop Parameter for the empty values + * @throws TurbineRuntimeException + */ + public void setEmptyValue(String prop) + { + if (prop != null) + { + throw new TurbineRuntimeException( + "Empty values are not valid for " + + this.getClass().getName()); + } + + emptyValue = null; + } + + /** * A suitable validator. * * @return A suitable validator 1.9 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/FloatField.java Index: FloatField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/FloatField.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- FloatField.java 19 Jun 2003 14:56:30 -0000 1.8 +++ FloatField.java 18 Jul 2003 08:32:30 -0000 1.9 @@ -104,6 +104,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new Double(prop); + } + + /** * A suitable validator. * * @return A suitable validator @@ -125,14 +145,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? new Float(inputs[i]) : null; + ? new Float(inputs[i]) : (Float) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? new Float(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? new Float(val) : getEmptyValue()); } } } 1.10 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/IntegerField.java Index: IntegerField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/IntegerField.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- IntegerField.java 19 Jun 2003 14:58:49 -0000 1.9 +++ IntegerField.java 18 Jul 2003 08:32:30 -0000 1.10 @@ -101,6 +101,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new Integer(prop); + } + + /** * A suitable validator. * * @return A suitable validator @@ -122,14 +142,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? new Integer(inputs[i]) : null; + ? new Integer(inputs[i]) : (Integer) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? new Integer(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? new Integer(val) : (Integer) getEmptyValue()); } } } 1.3 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/LongField.java Index: LongField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/LongField.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- LongField.java 18 Jul 2003 08:19:37 -0000 1.2 +++ LongField.java 18 Jul 2003 08:32:30 -0000 1.3 @@ -102,6 +102,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new Long(prop); + } + + /** * A suitable validator. * * @return A suitable validator @@ -123,14 +143,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? new Long(inputs[i]) : null; + ? new Long(inputs[i]) : (Long) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? new Long(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? new Long(val) : (Long) getEmptyValue()); } } } 1.3 +23 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/ShortField.java Index: ShortField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/ShortField.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ShortField.java 18 Jul 2003 08:19:37 -0000 1.2 +++ ShortField.java 18 Jul 2003 08:32:30 -0000 1.3 @@ -102,6 +102,26 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = null; + + if (prop == null) + { + return; + } + + emptyValue = new Short(prop); + } + + /** * A suitable validator. * * @return A suitable validator @@ -123,14 +143,14 @@ for (int i = 0; i < inputs.length; i++) { values[i] = StringUtils.isNotEmpty(inputs[i]) - ? new Short(inputs[i]) : null; + ? new Short(inputs[i]) : (Short) getEmptyValue(); } setTestValue(values); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? new Short(val) : null); + setTestValue(StringUtils.isNotEmpty(val) ? new Short(val) : (Short) getEmptyValue()); } } } 1.10 +16 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/StringField.java Index: StringField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/StringField.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- StringField.java 15 Jul 2003 10:13:57 -0000 1.9 +++ StringField.java 18 Jul 2003 08:32:30 -0000 1.10 @@ -106,6 +106,19 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + emptyValue = prop; + } + + /** * Sets the value of the field from data in the parser. */ protected void doSetValue() @@ -116,14 +129,14 @@ String[] sval = new String[ss.length]; for (int i = 0; i < ss.length; i++) { - sval[i] = (StringUtils.isNotEmpty(ss[i])) ? ss[i] : ""; + sval[i] = (StringUtils.isNotEmpty(ss[i])) ? ss[i] : (String) getEmptyValue(); } setTestValue(sval); } else { String val = parser.getString(getKey()); - setTestValue(StringUtils.isNotEmpty(val) ? val : ""); + setTestValue(StringUtils.isNotEmpty(val) ? val : (String) getEmptyValue()); } } 1.11 +21 -3 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/StringKeyField.java Index: StringKeyField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/model/StringKeyField.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- StringKeyField.java 19 Jun 2003 14:56:30 -0000 1.10 +++ StringKeyField.java 18 Jul 2003 08:32:30 -0000 1.11 @@ -112,6 +112,24 @@ } /** + * Set the empty Value. This value is used if Intake + * maps a field to a parameter returned by the user and + * the corresponding field is either empty (empty string) + * or non-existant. + * + * @param prop The value to use if the field is empty. + */ + public void setEmptyValue(String prop) + { + if (prop == null) + { + return; + } + + emptyValue = new StringKey(prop); + } + + /** * Sets the value of the field from data in the parser. */ protected void doSetValue() @@ -123,7 +141,7 @@ for (int i = 0; i < ss.length; i++) { ival[i] = (StringUtils.isNotEmpty(ss[i])) - ? new StringKey(ss[i]) : null; + ? new StringKey(ss[i]) : (StringKey) getEmptyValue(); } setTestValue(ival); } @@ -131,7 +149,7 @@ { String val = parser.getString(getKey()); setTestValue((StringUtils.isNotEmpty(val)) - ? new StringKey(val) : null); + ? new StringKey(val) : (StringKey) getEmptyValue()); } } } 1.9 +28 -1 jakarta-turbine-2/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java Index: XmlField.java =================================================================== RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- XmlField.java 7 Apr 2003 15:30:51 -0000 1.8 +++ XmlField.java 18 Jul 2003 08:32:30 -0000 1.9 @@ -93,6 +93,7 @@ private String mapToProperty; private String validator; private String defaultValue; + private String emptyValue; private String displaySize; /** @@ -135,6 +136,7 @@ setMapToProperty(attrib.getValue("mapToProperty")); setValidator(attrib.getValue("validator")); setDefaultValue(attrib.getValue("defaultValue")); + setDefaultValue(attrib.getValue("emptyValue")); } /** @@ -326,6 +328,26 @@ } /** + * Set the empty Value. + * + * @param prop The parameter to use as empty value. + */ + public void setEmptyValue(String prop) + { + emptyValue = prop; + } + + /** + * Get the empty Value. + * + * @return The empty value for this field. + */ + public String getEmptyValue() + { + return emptyValue; + } + + /** * The name of the field making sure the first letter is lowercase. * * @return a <code>String</code> value @@ -452,6 +474,11 @@ if (defaultValue != null) { result.append(" defaultValue=\"" + defaultValue + "\""); + } + + if (emptyValue != null) + { + result.append(" emptyValue=\"" + emptyValue + "\""); } if (rules.size() == 0)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]