Return-Path: Delivered-To: apmail-myfaces-users-archive@www.apache.org Received: (qmail 38992 invoked from network); 29 Sep 2007 14:28:04 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 29 Sep 2007 14:28:04 -0000 Received: (qmail 76452 invoked by uid 500); 29 Sep 2007 14:27:48 -0000 Delivered-To: apmail-myfaces-users-archive@myfaces.apache.org Received: (qmail 76423 invoked by uid 500); 29 Sep 2007 14:27:48 -0000 Mailing-List: contact users-help@myfaces.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "MyFaces Discussion" Delivered-To: mailing list users@myfaces.apache.org Received: (qmail 76412 invoked by uid 99); 29 Sep 2007 14:27:48 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 29 Sep 2007 07:27:48 -0700 X-ASF-Spam-Status: No, hits=3.3 required=10.0 tests=HTML_MESSAGE,PLING_QUERY,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of abhijit.s.ghosh@gmail.com designates 64.233.162.225 as permitted sender) Received: from [64.233.162.225] (HELO nz-out-0506.google.com) (64.233.162.225) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 29 Sep 2007 14:27:50 +0000 Received: by nz-out-0506.google.com with SMTP id r28so2101975nza for ; Sat, 29 Sep 2007 07:27:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; bh=8zO4rD4L32ZwZcetcQh/kVuH6v98/nJiiMCd5CR73aA=; b=KkuEk32Z0cKHbQtpS49VfS9BSmvKcRDovygQDYk7YtPeeR1yc2/nmTrPmS3tCJ0MbT7ZUXFAHr0VDnM8enxHM5niwk0DjE0PBZnGHrrR1QGfyEJsTWeV1u18Vd1Pigem7ZMno+YQ8QnHiOUhrlxEg5qwDtu9sIaCAmtxfKZ8XnU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=ZNioBUsI9Qq6KyOanEhc8aFj7irLfwjNjZsnL+KqU7SMU7O1l13BMANFMhlEUAzTqo168n68cx8wC9zhW0CiPdfsKx4eORJzieQwiwChahLSaj42HElwCfD85Ri8k/BZ1I6I+/zS0qar933CiJxoJKX2GbcINTLyvVEGirqYsEk= Received: by 10.114.254.1 with SMTP id b1mr449978wai.1191076048230; Sat, 29 Sep 2007 07:27:28 -0700 (PDT) Received: by 10.114.124.19 with HTTP; Sat, 29 Sep 2007 07:27:27 -0700 (PDT) Message-ID: <5fa9d6fe0709290727h2270e958wd70f2929e3998860@mail.gmail.com> Date: Sat, 29 Sep 2007 19:57:27 +0530 From: "Abhijit Ghosh" To: "MyFaces Discussion" Subject: Re: [Trinidad] inputText: autocomplete="off" ?! In-Reply-To: <46FE55F2.20104@eekboom.com> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_4373_33059883.1191076048183" References: <5395683.111871190791837835.JavaMail.servlet@kundenserver> <46FD9E62.7070407@eekboom.com> <5fa9d6fe0709290527t6b26d78bi838d16c7e8819956@mail.gmail.com> <46FE55F2.20104@eekboom.com> X-Virus-Checked: Checked by ClamAV on apache.org ------=_Part_4373_33059883.1191076048183 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Stephen, If you don't need to support this attribute in inputDate,inputColor etc. you can override the getAutoComplete to directly return a boolean value in each of the renderer subclasses(eg:SimpleInputColorRenderer).This way the SimpleInputTextRenderer will not look for the propertyKey in the FacesBean for components which don't have 'autoComplete' attribute. HTH, Abhi On 9/29/07, Stephen Friedrich wrote: > > Hi Abhi, > i made very few changes to the renderer, because somebody already started > the work and left a few TODOs, see the patch below. > (I still got to do something similar for the Form renderer to support the > attribute there, too.) > > Ooops, now that I look at it in broad daylight (well in typical Hamburg > gray > sky), it seems quite clear what was wrong. I did not define the property > in > subclasses, for example in CoreInputColor.xml. > Yet the SimpleInputColorRenderer delegates rendering of the attributes to > the base class SimpleInputColorRenderer. That tries to get the > autoComplete > which is not defined. > > Hm, now do I add the property to the subclasses also? Probably makes sense > there, also (InputColor, InputDate, InputNumberSpinbox). > > Another question: In JSF 1.2 the same attribute has been added and is > called > "autocomplete" (lower case c), Trinidad seems to prefer camel case and > there > also is a relict "noAutoComplete" attribute showing up in the code. > I dislike the double negation you get with noAutoComplete="false", but > should > we have "autoComplete" or "autocomplete"? > > --- > trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SimpleInputTextRenderer.java > (revision 580476) > +++ > trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SimpleInputTextRenderer.java > Sat Sep 29 00:06:21 CEST 2007 > @@ -59,6 +59,7 @@ > _wrapKey = type.findKey("wrap"); > _secretKey = type.findKey("secret"); > _maximumLengthKey = type.findKey("maximumLength"); > + _autoCompleteKey = type.findKey("autoComplete"); > _onselectKey = type.findKey("onselect"); > > } > @@ -231,8 +232,7 @@ > // render the autocomplete attribute > if (supportsAutoCompleteFormElements(arc)) > { > - // BUG 4019675: support autocomplete > - if (getNoAutoComplete(bean)) > + if (!getAutoComplete(bean)) > { > rw.writeAttribute("autocomplete", "off", null); > } > @@ -764,12 +764,13 @@ > return false; > } > > - /** > - * @todo Support in Trinidad? > - */ > - protected boolean getNoAutoComplete(FacesBean bean) > + protected boolean getAutoComplete(FacesBean bean) > { > - return false; > + Object o = bean.getProperty(_autoCompleteKey); > + if (o == null) > + o = _autoCompleteKey.getDefault(); > + assert(o != null); > + return !Boolean.FALSE.equals(o); > } > /* > * Is this a simple input text component? We need to know so that > subclasses > @@ -855,6 +856,7 @@ > private PropertyKey _wrapKey; > private PropertyKey _secretKey; > private PropertyKey _maximumLengthKey; > + private PropertyKey _autoCompleteKey; > private PropertyKey _onselectKey; > > static private final Integer _DEFAULT_PDA_COLUMNS = Integer.valueOf > (11); > > > > Abhijit Ghosh wrote: > > Hi Stephen, > > Can you please attach your changed SimpleInputTextRenderer? > > > > Thanks, > > Abhi > > > > On 9/29/07, *Stephen Friedrich* < trinidad@eekboom.com > > > wrote: > > > > Well, I did try, but I am too stupid. > > How do I get a new attribute to be recognized? I just don't > > understand how the taglib generation works. > > I edited > > > trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/CoreInputText.xml > > and added a propety: > > > > > in this > > text field should be remembered and offered for auto > > completion.]]> > > > > autoComplete > > boolean > > true > > > > > > I changed the SimpleInputTextRenderer. > > > > Finally I tried adding an attribute to UIConstants (to be safe in > > case it is magically used somewhere): > > public static final AttributeKey AUTO_COMPLETE_ATTR = new > > AttributeKey("autoComplete"); > > > > Yet after doing > > mvn clean > > mvn install > > I get the following error during renderer test: > > java.lang.NullPointerException > > at > > org.apache.myfaces.trinidad.bean.FacesBeanImpl._checkNotListKey( > FacesBeanImpl.java:472) > > at > > org.apache.myfaces.trinidad.bean.FacesBeanImpl.getProperty( > FacesBeanImpl.java:55) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.getAutoComplete > > (SimpleInputTextRenderer.java:769) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.renderAllAttributes > (SimpleInputTextRenderer.java:235) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.encodeAllAsElement > > (SimpleInputTextRenderer.java:129) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputListOfValuesRenderer.renderTextField > (SimpleInputListOfValuesRenderer.java:197) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputColorRenderer.renderTextField > > (SimpleInputColorRenderer.java:189) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputListOfValuesRenderer.encodeAllAsElement > (SimpleInputListOfValuesRenderer.java:154) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputColorRenderer.encodeAllAsElement > > (SimpleInputColorRenderer.java:168) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.FormElementRenderer.encodeAll > (FormElementRenderer.java:109) > > at > > org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer > > (CoreRenderer.java:330) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.encodeAll > (InputLabelAndMessageRenderer.java:119) > > at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd > > (CoreRenderer.java:220) > > at > > org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd( > UIXComponentBase.java:710) > > at > > org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive( > RenderUtils.java > > :69) > > at > > org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive( > RenderUtils.java:64) > > at > > org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild( > CoreRenderer.java:294) > > at > > org.apache.myfaces.trinidad.render.CoreRenderer.encodeAllChildren > > (CoreRenderer.java:316) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.PanelPartialRootRenderer.renderContent > (PanelPartialRootRenderer.java:64) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.BodyRenderer.renderContent > > (BodyRenderer.java:139) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.PanelPartialRootRenderer.encodeAll > (PanelPartialRootRenderer.java:119) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.BodyRenderer.encodeAll > > (BodyRenderer.java:79) > > at > > org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer( > CoreRenderer.java:330) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.DocumentRenderer.encodeAll > > (DocumentRenderer.java:80) > > at > > org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd( > CoreRenderer.java:220) > > at > > org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd( > UIXComponentBase.java > > :710) > > at > > org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive( > RenderUtils.java:69) > > at > > org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive( > RenderUtils.java:64) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.RenderUtils.encodeRecursive > > (RenderUtils.java:47) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.RenderKitTestCase$BaseTest.renderRoot > (RenderKitTestCase.java:213) > > at > > > org.apache.myfaces.trinidadinternal.renderkit.RenderKitTestCase$RendererTest.runTest > > (RenderKitTestCase.java:361) > > > > Any comments? Pointers to development documentation? > > > > > > Stephen Friedrich wrote: > > >> Do you mind to file an enhancement request ? > > > > > > Thanks for the answer. I'll try and create a patch and submit it > > with a > > > jira issue. > > > > > > > > > > > > On 9/26/07, Stephen Friedrich > > wrote: > > >> Is there any reason that Trinidad's inputText tag does not > > support an > > > autocomplete > > >> attribute to disable completion in the browser? > > >> > > >> That should be very easy to implement as it should only be > > passed through to > > > html, right? > > > > > > > > > > > > ------=_Part_4373_33059883.1191076048183 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Stephen,
If you don't need to support this attribute in inputDate,inputColor etc. you can override the getAutoComplete to directly return a boolean value in each of the renderer subclasses(eg:SimpleInputColorRenderer).This way the SimpleInputTextRenderer will not look for the propertyKey in the FacesBean for components which don't have 'autoComplete' attribute.

HTH,
Abhi


On 9/29/07, Stephen Friedrich <trinidad@eekboom.com> wrote:
Hi Abhi,
i made very few changes to the renderer, because somebody already started
the work and left a few TODOs, see the patch below.
(I still got to do something similar for the Form renderer to support the
attribute there, too.)

Ooops, now that I look at it in broad daylight (well in typical Hamburg gray
sky), it seems quite clear what was wrong. I did not define the property in
subclasses, for example in CoreInputColor.xml .
Yet the SimpleInputColorRenderer delegates rendering of the attributes to
the base class SimpleInputColorRenderer. That tries to get the autoComplete
which is not defined.

Hm, now do I add the property to the subclasses also? Probably makes sense
there, also (InputColor, InputDate, InputNumberSpinbox).

Another question: In JSF 1.2 the same attribute has been added and is called
"autocomplete" (lower case c), Trinidad seems to prefer camel case and there
also is a relict "noAutoComplete" attribute showing up in the code.
I dislike the double negation you get with noAutoComplete="false", but should
we have "autoComplete" or "autocomplete"?

--- trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SimpleInputTextRenderer.java   (revision 580476)
+++ trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SimpleInputTextRenderer.java   Sat Sep 29 00:06:21 CEST 2007
@@ -59,6 +59,7 @@
      _wrapKey = type.findKey("wrap");
      _secretKey = type.findKey("secret");
      _maximumLengthKey = type.findKey("maximumLength");
+    _autoCompleteKey = type.findKey("autoComplete");
      _onselectKey = type.findKey("onselect");

    }
@@ -231,8 +232,7 @@
        // render the autocomplete attribute
        if (supportsAutoCompleteFormElements(arc))
        {
-        // BUG 4019675: support autocomplete
-        if (getNoAutoComplete(bean))
+        if (!getAutoComplete(bean))
          {
            rw.writeAttribute("autocomplete", "off", null);
          }
@@ -764,12 +764,13 @@
      return false;
    }

-  /**
-   * @todo Support in Trinidad?
-   */
-  protected boolean getNoAutoComplete(FacesBean bean)
+  protected boolean getAutoComplete(FacesBean bean)
    {
-    return false;
+    Object o = bean.getProperty(_autoCompleteKey);
+    if (o == null)
+      o = _autoCompleteKey.getDefault();
+    assert(o != null);
+    return !Boolean.FALSE.equals(o);
    }
    /*
     * Is this a simple input text component? We need to know so that subclasses
@@ -855,6 +856,7 @@
    private PropertyKey _wrapKey;
    private PropertyKey _secretKey;
    private PropertyKey _maximumLengthKey;
+  private PropertyKey _autoCompleteKey;
    private PropertyKey _onselectKey;

    static private final Integer _DEFAULT_PDA_COLUMNS = Integer.valueOf(11);



Abhijit Ghosh wrote:
> Hi Stephen,
> Can you please attach your changed SimpleInputTextRenderer?
>
> Thanks,
> Abhi
>
> On 9/29/07, *Stephen Friedrich* < trinidad@eekboom.com
> <mailto:trinidad@eekboom.com>> wrote:
>
>     Well, I did try, but I am too stupid.
>     How do I get a new attribute to be recognized? I just don't
>     understand how the taglib generation works.
>     I edited
>         trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/CoreInputText.xml
>     and added a propety:
>          <property>
>            <description><![CDATA[hint to the web browser whether values
>     in this
>                text field should be remembered and offered for auto
>     completion.]]>
>            </description>
>            <property-name>autoComplete</property-name>
>            <property-class>boolean</property-class>
>            <default-value>true</default-value>
>          </property>
>
>     I changed the SimpleInputTextRenderer.
>
>     Finally I tried adding an attribute to UIConstants (to be safe in
>     case it is magically used somewhere):
>        public static final AttributeKey AUTO_COMPLETE_ATTR = new
>     AttributeKey("autoComplete");
>
>     Yet after doing
>         mvn clean
>         mvn install
>     I get the following error during renderer test:
>     java.lang.NullPointerException
>             at
>     org.apache.myfaces.trinidad.bean.FacesBeanImpl._checkNotListKey(FacesBeanImpl.java:472)
>             at
>     org.apache.myfaces.trinidad.bean.FacesBeanImpl.getProperty (FacesBeanImpl.java:55)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.getAutoComplete
>     (SimpleInputTextRenderer.java:769)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.renderAllAttributes(SimpleInputTextRenderer.java:235)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputTextRenderer.encodeAllAsElement
>     (SimpleInputTextRenderer.java:129)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputListOfValuesRenderer.renderTextField(SimpleInputListOfValuesRenderer.java :197)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputColorRenderer.renderTextField
>     (SimpleInputColorRenderer.java:189)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputListOfValuesRenderer.encodeAllAsElement(SimpleInputListOfValuesRenderer.java:154)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SimpleInputColorRenderer.encodeAllAsElement
>     (SimpleInputColorRenderer.java:168)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.FormElementRenderer.encodeAll(FormElementRenderer.java:109)
>             at
>     org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer
>     (CoreRenderer.java:330)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputLabelAndMessageRenderer.encodeAll (InputLabelAndMessageRenderer.java:119)
>             at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd
>     (CoreRenderer.java:220)
>             at
>     org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd (UIXComponentBase.java:710)
>             at
>     org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive(RenderUtils.java
>     :69)
>             at
>     org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive (RenderUtils.java:64)
>             at
>     org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild(CoreRenderer.java:294)
>             at
>     org.apache.myfaces.trinidad.render.CoreRenderer.encodeAllChildren
>     (CoreRenderer.java:316)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.PanelPartialRootRenderer.renderContent(PanelPartialRootRenderer.java:64)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.BodyRenderer.renderContent
>     (BodyRenderer.java:139)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.PanelPartialRootRenderer.encodeAll (PanelPartialRootRenderer.java:119)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.BodyRenderer.encodeAll
>     (BodyRenderer.java:79)
>             at
>     org.apache.myfaces.trinidad.render.CoreRenderer.delegateRenderer(CoreRenderer.java:330)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.DocumentRenderer.encodeAll
>     (DocumentRenderer.java :80)
>             at
>     org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:220)
>             at
>     org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd( UIXComponentBase.java
>     :710)
>             at
>     org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive(RenderUtils.java:69)
>             at
>     org.apache.myfaces.trinidad.render.RenderUtils.encodeRecursive (RenderUtils.java:64)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.RenderUtils.encodeRecursive
>     (RenderUtils.java:47)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.RenderKitTestCase$BaseTest.renderRoot (RenderKitTestCase.java:213)
>             at
>     org.apache.myfaces.trinidadinternal.renderkit.RenderKitTestCase$RendererTest.runTest
>     (RenderKitTestCase.java:361)
>
>     Any comments? Pointers to development documentation?
>
>
>     Stephen Friedrich wrote:
>      >> Do you mind to file an enhancement request ?
>      >
>      > Thanks for the answer. I'll try and create a patch and submit it
>     with a
>      > jira issue.
>      >
>      >
>      >
>      > On 9/26/07, Stephen Friedrich <trinidad@eekboom.com
>     <mailto:trinidad@eekboom.com>> wrote:
>      >> Is there any reason that Trinidad's inputText tag does not
>     support an
>      > autocomplete
>      >> attribute to disable completion in the browser?
>      >>
>      >> That should be very easy to implement as it should only be
>     passed through to
>      > html, right?
>      >
>      >
>
>


------=_Part_4373_33059883.1191076048183--