MyFaces Trinidad
  1. MyFaces Trinidad
  2. TRINIDAD-713

Using "name" as the id for a component breaks form submission. "name" appears to be an undocumented reserved identifier.

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.2.2-core
    • Fix Version/s: 1.0.4-core
    • Component/s: Components
    • Labels:
      None

      Description

      Using the trinidad-blank as an example, if the the id of the input field in "page1.jspx" is changed from:

      <tr:inputText label="Your name" id="input1" value="#

      {helloWorldBacking.name}" required="true"/>

      to:

      <tr:inputText label="Your name" id="name" value="#{helloWorldBacking.name}

      " required="true"/>

      nothing happens when the "press me" button is pushed (the form is not posted).

      The following JavaScript error is reported:

      Error ``TypeError: a0.split is not a function'' [xs] in file ``http://localhost:8080/trinidad/adf/jsLibs/Common1_2_2.js'', line 4512, character 0.

      In the code fragment below "a0" has been resolved to the HTMLFormElement, but apparently because the form contains a button element named "name", "a0.name" does not return the form name, but instead the button instance, and "split" is not a method on HTMLButtonElement.

      4861 if(!a0)
      4862 return false;
      4863 var a6=window["_"+_getJavascriptId(a0.name)+"Validator"];
      4864 if(a6==(void 0))

      function _getJavascriptId(a0)
      4511

      { 4512 return a0.split(':').join('_'); 4513 }

      Is there a way in JavaScript to avoid this name conflict? It does not seem reasonable it is illegal to add an element called "name" to a form.

        Activity

        Hide
        Mike Hanafey added a comment -

        A bit more information about the failure was added to the description.

        Show
        Mike Hanafey added a comment - A bit more information about the failure was added to the description.
        Hide
        Mike Hanafey added a comment -

        Could someone comment on this issue? Is "name" and invalid value for the id attribute, or is this a bug?

        Show
        Mike Hanafey added a comment - Could someone comment on this issue? Is "name" and invalid value for the id attribute, or is this a bug?
        Hide
        Leonardo Uribe added a comment -

        Ok, the problem is because when a component inside a form has an id with "name" in his value override the property form.name on the DOM tree. The solution is check when this occurs creating a function like this
        (this function takes the proper attribute name when this occurs):

        function _getFormName(form){
        var name = form.name;

        if (typeof name == 'object')
        {
        if (_agent.isIE)

        { return form.attributes['name'].nodeValue; }

        else

        { return form.getAttribute('name'); }

        }
        else

        { return name; }

        }

        and replacing all calls like form.name with _getFormName(form)

        Show
        Leonardo Uribe added a comment - Ok, the problem is because when a component inside a form has an id with "name" in his value override the property form.name on the DOM tree. The solution is check when this occurs creating a function like this (this function takes the proper attribute name when this occurs): function _getFormName(form){ var name = form.name; if (typeof name == 'object') { if (_agent.isIE) { return form.attributes['name'].nodeValue; } else { return form.getAttribute('name'); } } else { return name; } } and replacing all calls like form.name with _getFormName(form)

          People

          • Assignee:
            Adam Winer
            Reporter:
            Mike Hanafey
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development