Uploaded image for project: 'MyFaces Core'
  1. MyFaces Core
  2. MYFACES-2640

(JSF.js) Ajax Render component problem, replace with whole fragment not one element.

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Invalid
    • 2.0.0-beta-3
    • 2.0.1
    • JSR-314
    • None
    • tomcat 6.0.20 java (mac os x )

    Description

      after ajax submit, jsf.js will re-render some element depending on jsf.ajax.request(

      {render:" some elements "}

      );
      but this js code will cause some problem.

      jsf.js:

      myfaces._impl._util._Utils.replaceHtmlItem = function (request, context, itemIdToReplace, newTag, form) {
      ......
      var fragment = range.createContextualFragment(newTag);
      evalNode = item.parentNode.replaceChild(fragment, item)
      .....
      }

      sometime fragment will has more than one childNodes, or the childNode not has clientId, but the childNode of childNode has clientId.

      this will cause html unstable.

      Please fix it.

      this is my suggestion:

      myfaces._impl._util._Utils.replaceHtmlItem = function (request, context, itemIdToReplace, newTag, form) {

      .............
      Orginal:
      var fragment = range.createContextualFragment(newTag);
      evalNode = item.parentNode.replaceChild(fragment, item)

      fix:
      var fragment = range.createContextualFragment(newTag);
      var replaceItem = myfaces._impl._util._Utils.findHtmlItemFromFragment(fragment, itemIdToReplace);
      if(replaceItem == null)replaceItem = fragment;
      evalNode = item.parentNode.replaceChild(replaceItem, item)
      ..................
      }

      myfaces._impl._util._Utils.findHtmlItemFromFragment = function(fragment, itemId){
      if(fragment.childNodes == null)
      return null;
      for(var i = 0; i < fragment.childNodes.length ; i++ )

      { var c = fragment.childNodes[i]; if(c.id == itemId) return c; }

      for(var i = 0; i < fragment.childNodes.length ; i++ )

      { var c = fragment.childNodes[i]; var item = myfaces._impl._util._Utils.findHtmlItemFromFragment(c, itemId); if(item != null) return item; }

      return null;
      };

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            puddlor Mark Li
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 4h
                4h
                Remaining:
                Remaining Estimate - 4h
                4h
                Logged:
                Time Spent - Not Specified
                Not Specified

                Slack

                  Issue deployment