Author: niallp Date: Tue Apr 5 23:37:00 2005 New Revision: 160261 URL: http://svn.apache.org/viewcvs?view=rev&rev=160261 Log: Bug 21603 Automatic readonly/disabled settings in struts-html reported by Shai Berger.
Modified: struts/el/trunk/doc/userGuide/struts-html-el.xml struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTag.java struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTagBeanInfo.java struts/taglib/trunk/doc/userGuide/struts-html.xml struts/taglib/trunk/src/java/org/apache/struts/taglib/html/BaseHandlerTag.java struts/taglib/trunk/src/java/org/apache/struts/taglib/html/FormTag.java struts/taglib/trunk/src/java/org/apache/struts/taglib/html/ImgTag.java struts/taglib/trunk/src/java/org/apache/struts/taglib/html/LinkTag.java struts/taglib/trunk/src/java/org/apache/struts/taglib/html/PasswordTag.java struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextTag.java struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextareaTag.java Modified: struts/el/trunk/doc/userGuide/struts-html-el.xml URL: http://svn.apache.org/viewcvs/struts/el/trunk/doc/userGuide/struts-html-el.xml?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/el/trunk/doc/userGuide/struts-html-el.xml (original) +++ struts/el/trunk/doc/userGuide/struts-html-el.xml Tue Apr 5 23:37:00 2005 @@ -1640,6 +1640,17 @@ </attribute> <attribute> + <name>disabled</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <info> + Set to <code>true</code> if the Form's input fields should be + disabled. + </info> + <since>Struts 1.2.7</since> + </attribute> + + <attribute> <name>enctype</name> <required>false</required> <rtexprvalue>true</rtexprvalue> @@ -1699,6 +1710,17 @@ <info> JavaScript event handler executed if the form is submitted. </info> + </attribute> + + <attribute> + <name>readonly</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <info> + Set to <code>true</code> if the Form's input fields should be + read only. + </info> + <since>Struts 1.2.7</since> </attribute> <attribute> Modified: struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTag.java URL: http://svn.apache.org/viewcvs/struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTag.java (original) +++ struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTag.java Tue Apr 5 23:37:00 2005 @@ -42,6 +42,11 @@ */ private String actionExpr; /** + * Instance variable mapped to "disabled" tag attribute. + * (Mapping set in associated BeanInfo class.) + */ + private String disabledExpr; + /** * Instance variable mapped to "enctype" tag attribute. * (Mapping set in associated BeanInfo class.) */ @@ -72,6 +77,11 @@ */ private String onsubmitExpr; /** + * Instance variable mapped to "readonly" tag attribute. + * (Mapping set in associated BeanInfo class.) + */ + private String readonlyExpr; + /** * Instance variable mapped to "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ @@ -108,6 +118,11 @@ */ public String getActionExpr() { return (actionExpr); } /** + * Getter method for "disabled" tag attribute. + * (Mapping set in associated BeanInfo class.) + */ + public String getDisabledExpr() { return (disabledExpr); } + /** * Getter method for "enctype" tag attribute. * (Mapping set in associated BeanInfo class.) */ @@ -138,6 +153,11 @@ */ public String getOnsubmitExpr() { return (onsubmitExpr); } /** + * Getter method for "readonly" tag attribute. + * (Mapping set in associated BeanInfo class.) + */ + public String getReadonlyExpr() { return (readonlyExpr); } + /** * Getter method for "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ @@ -174,6 +194,11 @@ */ public void setActionExpr(String actionExpr) { this.actionExpr = actionExpr; } /** + * Setter method for "disabled" tag attribute. + * (Mapping set in associated BeanInfo class.) + */ + public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } + /** * Setter method for "enctype" tag attribute. * (Mapping set in associated BeanInfo class.) */ @@ -204,6 +229,11 @@ */ public void setOnsubmitExpr(String onsubmitExpr) { this.onsubmitExpr = onsubmitExpr; } /** + * Setter method for "readonly" tag attribute. + * (Mapping set in associated BeanInfo class.) + */ + public void setReadonlyExpr(String readonlyExpr) { this.readonlyExpr = readonlyExpr; } + /** * Setter method for "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ @@ -241,12 +271,14 @@ { super.release(); setActionExpr(null); + setDisabledExpr(null); setEnctypeExpr(null); setFocusExpr(null); setFocusIndexExpr(null); setMethodExpr(null); setOnresetExpr(null); setOnsubmitExpr(null); + setReadonlyExpr(null); setScriptLanguageExpr(null); setStyleExpr(null); setStyleClassExpr(null); @@ -279,6 +311,10 @@ this, pageContext)) != null) setAction(string); + if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), + this, pageContext)) != null) + setDisabled(bool.booleanValue()); + if ((string = EvalHelper.evalString("enctype", getEnctypeExpr(), this, pageContext)) != null) setEnctype(string); @@ -302,6 +338,10 @@ if ((string = EvalHelper.evalString("onsubmit", getOnsubmitExpr(), this, pageContext)) != null) setOnsubmit(string); + + if ((bool = EvalHelper.evalBoolean("readonly", getReadonlyExpr(), + this, pageContext)) != null) + setReadonly(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("scriptLanguage", getScriptLanguageExpr(), this, pageContext)) != null) Modified: struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTagBeanInfo.java URL: http://svn.apache.org/viewcvs/struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTagBeanInfo.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTagBeanInfo.java (original) +++ struts/el/trunk/src/share/org/apache/strutsel/taglib/html/ELFormTagBeanInfo.java Tue Apr 5 23:37:00 2005 @@ -40,6 +40,10 @@ null, "setActionExpr")); } catch (IntrospectionException ex) {} try { + proplist.add(new PropertyDescriptor("disabled", ELTextTag.class, + null, "setDisabledExpr")); + } catch (IntrospectionException ex) {} + try { proplist.add(new PropertyDescriptor("enctype", ELFormTag.class, null, "setEnctypeExpr")); } catch (IntrospectionException ex) {} @@ -66,6 +70,10 @@ try { proplist.add(new PropertyDescriptor("onsubmit", ELFormTag.class, null, "setOnsubmitExpr")); + } catch (IntrospectionException ex) {} + try { + proplist.add(new PropertyDescriptor("readonly", ELTextTag.class, + null, "setReadonlyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELFormTag.class, Modified: struts/taglib/trunk/doc/userGuide/struts-html.xml URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/doc/userGuide/struts-html.xml?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/doc/userGuide/struts-html.xml (original) +++ struts/taglib/trunk/doc/userGuide/struts-html.xml Tue Apr 5 23:37:00 2005 @@ -1640,6 +1640,17 @@ </attribute> <attribute> + <name>disabled</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <info> + Set to <code>true</code> if the Form's input fields should be + disabled. + </info> + <since>Struts 1.2.7</since> + </attribute> + + <attribute> <name>enctype</name> <required>false</required> <rtexprvalue>true</rtexprvalue> @@ -1699,6 +1710,17 @@ <info> JavaScript event handler executed if the form is submitted. </info> + </attribute> + + <attribute> + <name>readonly</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <info> + Set to <code>true</code> if the Form's input fields should be + read only. + </info> + <since>Struts 1.2.7</since> </attribute> <attribute> Modified: struts/taglib/trunk/src/java/org/apache/struts/taglib/html/BaseHandlerTag.java URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/src/java/org/apache/struts/taglib/html/BaseHandlerTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/src/java/org/apache/struts/taglib/html/BaseHandlerTag.java (original) +++ struts/taglib/trunk/src/java/org/apache/struts/taglib/html/BaseHandlerTag.java Tue Apr 5 23:37:00 2005 @@ -132,9 +132,22 @@ /** Component is disabled. */ private boolean disabled = false; + /** Indicates whether 'disabled' is a valid attribute */ + protected boolean doDisabled = true; + /** Component is readonly. */ private boolean readonly = false; + /** + * <p>Indicates whether 'readonly' is a valid attribute.</p> + * + * <p>According to the HTML 4.0 Specification <readonly> + * is valid for <input type="text">, <input type="password"> + * and <textarea"> elements. Therefore, except for those tags this + * value is set to <code>false</code>.</p> + */ + protected boolean doReadonly = false; + // CSS Style Support /** Style attribute associated with component. */ @@ -844,12 +857,27 @@ prepareAttribute(handlers, "onblur", getOnblur()); prepareAttribute(handlers, "onfocus", getOnfocus()); - if (getDisabled()) { - handlers.append(" disabled=\"disabled\""); + // Get the parent FormTag (if necessary) + FormTag formTag = null; + if ((doDisabled && !getDisabled()) || + (doReadonly && !getReadonly())) { + formTag = (FormTag)findAncestorWithClass(this, FormTag.class); } - if (getReadonly()) { - handlers.append(" readonly=\"readonly\""); + // Format Disabled + if (doDisabled) { + boolean formDisabled = formTag == null ? false : formTag.isDisabled(); + if (formDisabled || getDisabled()) { + handlers.append(" disabled=\"disabled\""); + } + } + + // Format Read Only + if (doReadonly) { + boolean formReadOnly = formTag == null ? false : formTag.isReadonly(); + if (formReadOnly || getReadonly()) { + handlers.append(" readonly=\"readonly\""); + } } } Modified: struts/taglib/trunk/src/java/org/apache/struts/taglib/html/FormTag.java URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/src/java/org/apache/struts/taglib/html/FormTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/src/java/org/apache/struts/taglib/html/FormTag.java (original) +++ struts/taglib/trunk/src/java/org/apache/struts/taglib/html/FormTag.java Tue Apr 5 23:37:00 2005 @@ -169,6 +169,12 @@ */ protected String acceptCharset = null; + /** Controls whether child controls should be 'disabled'. */ + private boolean disabled = false; + + /** Controls whether child controls should be 'readonly'. */ + protected boolean readonly = false; + // ------------------------------------------------------------- Properties /** @@ -403,6 +409,26 @@ } + /** Sets the disabled event handler. */ + public void setDisabled(boolean disabled) { + this.disabled = disabled; + } + + /** Returns the disabled event handler. */ + public boolean isDisabled() { + return disabled; + } + + /** Sets the readonly event handler. */ + public void setReadonly(boolean readonly) { + this.readonly = readonly; + } + + /** Returns the readonly event handler. */ + public boolean isReadonly() { + return readonly; + } + // --------------------------------------------------------- Public Methods @@ -680,12 +706,14 @@ action = null; moduleConfig = null; enctype = null; + disabled = false; focus = null; focusIndex = null; mapping = null; method = null; onreset = null; onsubmit = null; + readonly = false; servlet = null; style = null; styleClass = null; Modified: struts/taglib/trunk/src/java/org/apache/struts/taglib/html/ImgTag.java URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/src/java/org/apache/struts/taglib/html/ImgTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/src/java/org/apache/struts/taglib/html/ImgTag.java (original) +++ struts/taglib/trunk/src/java/org/apache/struts/taglib/html/ImgTag.java Tue Apr 5 23:37:00 2005 @@ -44,6 +44,13 @@ public class ImgTag extends BaseHandlerTag { + // ----------------------------------------------------- Constructor + + public ImgTag() { + super(); + doDisabled = false; + } + // ------------------------------------------------------------- Properties /** Modified: struts/taglib/trunk/src/java/org/apache/struts/taglib/html/LinkTag.java URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/src/java/org/apache/struts/taglib/html/LinkTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/src/java/org/apache/struts/taglib/html/LinkTag.java (original) +++ struts/taglib/trunk/src/java/org/apache/struts/taglib/html/LinkTag.java Tue Apr 5 23:37:00 2005 @@ -44,6 +44,13 @@ */ protected String text = null; + // ----------------------------------------------------- Constructor + + public LinkTag() { + super(); + doDisabled = false; + } + // ------------------------------------------------------------- Properties Modified: struts/taglib/trunk/src/java/org/apache/struts/taglib/html/PasswordTag.java URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/src/java/org/apache/struts/taglib/html/PasswordTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/src/java/org/apache/struts/taglib/html/PasswordTag.java (original) +++ struts/taglib/trunk/src/java/org/apache/struts/taglib/html/PasswordTag.java Tue Apr 5 23:37:00 2005 @@ -31,6 +31,7 @@ public PasswordTag() { super(); this.type = "password"; + doReadonly = true; } } Modified: struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextTag.java URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextTag.java (original) +++ struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextTag.java Tue Apr 5 23:37:00 2005 @@ -34,8 +34,9 @@ */ public TextTag() { - super(); - this.type = "text"; + super(); + this.type = "text"; + doReadonly = true; } Modified: struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextareaTag.java URL: http://svn.apache.org/viewcvs/struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextareaTag.java?view=diff&r1=160260&r2=160261 ============================================================================== --- struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextareaTag.java (original) +++ struts/taglib/trunk/src/java/org/apache/struts/taglib/html/TextareaTag.java Tue Apr 5 23:37:00 2005 @@ -30,6 +30,13 @@ public class TextareaTag extends BaseInputTag { + // ----------------------------------------------------- Constructor + + public TextareaTag () { + super(); + doReadonly = true; + } + // --------------------------------------------------------- Public Methods --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]