ICEfaces
  1. ICEfaces
  2. ICE-3458

Add maxlength attribute to inputTextarea

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.7.1
    • Fix Version/s: 1.8.1
    • Component/s: ICE-Components
    • Labels:
      None
    • Environment:
      All
    • Workaround Exists:
      Yes
    • Workaround Description:
      Hide
      Use Javascript to replicate similar behavior

      JavaScript:
           <script language="javascript">
                      function textCounter(field,maxlimit) {
                          if (field.value.length > maxlimit)
                              field.value = field.value.substring(0, maxlimit);
                          
                      }
           </script>

      Component:

      <ice:inputTextarea id="text"
                                         cols="50"
                                         rows="3"
                                         value="#{testBean.text}"
                                         onkeydown="textCounter(this, 20)"/>
      Show
      Use Javascript to replicate similar behavior JavaScript:      <script language="javascript">                 function textCounter(field,maxlimit) {                     if (field.value.length > maxlimit)                         field.value = field.value.substring(0, maxlimit);                                      }      </script> Component: <ice:inputTextarea id="text"                                    cols="50"                                    rows="3"                                    value="#{testBean.text}"                                    onkeydown="textCounter(this, 20)"/>

      Description

      The inputText component has a maxlength attribute which will limit the characters in the component. There has been a request for this feature to be added onto the inputTextarea component.

        Issue Links

          Activity

          Hide
          Mark Collette added a comment -

          To add some background info, maxlenth is not a standard attribute of textarea, in the html specification. None of the browsers support it. For javascript solutions, there are two main ones: the complicated and more correct solution of capturing the key presses to discard the most recently pressed key, and the simple one that involves truncating the text. The complicated one can fail at handling pasted values, and is tricky to handle non-input key events. The simple one handles those issues fine, but doesn't exactly properly handle things when the caret is not at the end of the textarea. As well, the text that will be truncated does briefly appear before being discarded.

          With all these caveats in mind, we'll go with the simple solution, which is also suggested by the issue originator.

          Show
          Mark Collette added a comment - To add some background info, maxlenth is not a standard attribute of textarea, in the html specification. None of the browsers support it. For javascript solutions, there are two main ones: the complicated and more correct solution of capturing the key presses to discard the most recently pressed key, and the simple one that involves truncating the text. The complicated one can fail at handling pasted values, and is tricky to handle non-input key events. The simple one handles those issues fine, but doesn't exactly properly handle things when the caret is not at the end of the textarea. As well, the text that will be truncated does briefly appear before being discarded. With all these caveats in mind, we'll go with the simple solution, which is also suggested by the issue originator.
          Hide
          Mark Collette added a comment -

          If an application specifies the maxlength attribute on an ice:inputTextarea component, then onkeydown and onchange listeners will be registered, which will truncate the ending of the text, to remain within the limit of number of characters. Extra characters might appear, and then only be truncated once the user presses another key on the keyboard, or clicks away. Especially if text is pasted in.

          Subversion 18853
          icefaces\bridge\lib\extras\extras.js
          icefaces\component-metadata\src\main\resources\conf\ice_properties\ice-inputTextarea-props.xml
          icefaces\component\src\com\icesoft\faces\component\ext\HtmlInputTextarea.java
          icefaces\component\src\com\icesoft\faces\component\ext\renderkit\TextareaRenderer.java
          icefaces\core\src\com\icesoft\faces\renderkit\dom_html_basic\TextareaRenderer.java

          Show
          Mark Collette added a comment - If an application specifies the maxlength attribute on an ice:inputTextarea component, then onkeydown and onchange listeners will be registered, which will truncate the ending of the text, to remain within the limit of number of characters. Extra characters might appear, and then only be truncated once the user presses another key on the keyboard, or clicks away. Especially if text is pasted in. Subversion 18853 icefaces\bridge\lib\extras\extras.js icefaces\component-metadata\src\main\resources\conf\ice_properties\ice-inputTextarea-props.xml icefaces\component\src\com\icesoft\faces\component\ext\HtmlInputTextarea.java icefaces\component\src\com\icesoft\faces\component\ext\renderkit\TextareaRenderer.java icefaces\core\src\com\icesoft\faces\renderkit\dom_html_basic\TextareaRenderer.java
          Hide
          Joanne Bai added a comment -

          QA tested it with success on ICEfaces trunk revision 18864

          Test app has been added to the QA repo

          Show
          Joanne Bai added a comment - QA tested it with success on ICEfaces trunk revision 18864 Test app has been added to the QA repo

            People

            • Assignee:
              Mark Collette
              Reporter:
              Arran Mccullough
            • Votes:
              11 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: