MyFaces Core
  1. MyFaces Core
  2. MYFACES-3034

ui:repeat offset and size performs incorrect validation

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.3
    • Fix Version/s: 2.0.8, 2.1.2
    • Component/s: General
    • Labels:
      None
    • Environment:
      OpenJDK 1.6.0_20; Tomcat 6.0.20; Ubuntu 10.04 on kernel version 2.6.32-28-generic

      Description

      The following ui:repeat tag with those values of size and offset throw a FacesException with the message: "iteration offset cannot be greater than collection size."

      <ui:repeat var="listing" value="#

      {myListings.listings}

      " size="19" offset="20">

      It appears that the method _validateAttributes() in the UIRepeat class performs the validation incorrectly. It seems to assume that the value of size is the size of the collection, rather than the desired iteration size. Here is the relevant code from _validateAttributes():

      if ((size > -1) && (begin > size))

      { throw new FacesException ("iteration offset cannot be greater " + "than collection size"); }

      The exception is thrown in the above case because begin > size, where begin = offset = 20.

        Issue Links

          Activity

          Hide
          Leonardo Uribe added a comment -

          From users list:

          Please help to publish the latest MyFaces 2.0.8-SNAPSHOT

          OK, I was thinking that an old MyFaces snapshot is used as I got a failure
          in my sample for some changes are done to UIRepeat tag in
          MYFACES-3034<https://issues.apache.org/jira/browse/MYFACES-3034> .
          After some investigation later, it seems that the changes brought a problem.
          If repeat tag is used as :
          <ui:repeat var="listing" value="#

          {myListings.listings}

          " offset="20">
          An exception is always thrown on line 457,
          --->
          if (size == -1)

          { size = end; <-- Should it be size = end - offset ? }

          if (end >= 0) {
          if (size < 0)

          { throw new FacesException ("iteration size cannot be less " + "than zero"); }

          else if ((begin + size) > end) {
          throw new FacesException ("iteration size cannot be greater
          " + <--- Exception is always thrown
          "than collection size");

          Show
          Leonardo Uribe added a comment - From users list: Please help to publish the latest MyFaces 2.0.8-SNAPSHOT OK, I was thinking that an old MyFaces snapshot is used as I got a failure in my sample for some changes are done to UIRepeat tag in MYFACES-3034 < https://issues.apache.org/jira/browse/MYFACES-3034 > . After some investigation later, it seems that the changes brought a problem. If repeat tag is used as : <ui:repeat var="listing" value="# {myListings.listings} " offset="20"> An exception is always thrown on line 457, ---> if (size == -1) { size = end; <-- Should it be size = end - offset ? } if (end >= 0) { if (size < 0) { throw new FacesException ("iteration size cannot be less " + "than zero"); } else if ((begin + size) > end) { throw new FacesException ("iteration size cannot be greater " + <--- Exception is always thrown "than collection size");
          Hide
          Rey Dalisay added a comment -

          Just to add ... On Mojarra 2.0.4, the size attribute is taken to mean the position of the last element to retrieve, not the number of elements to retrieve. The following tag performs on Mojarra what was originally intended from the above test case.

          <ui:repeat var="listing" value="#

          {myListings.listings}

          " size="38" offset="20">

          Show
          Rey Dalisay added a comment - Just to add ... On Mojarra 2.0.4, the size attribute is taken to mean the position of the last element to retrieve, not the number of elements to retrieve. The following tag performs on Mojarra what was originally intended from the above test case. <ui:repeat var="listing" value="# {myListings.listings} " size="38" offset="20">

            People

            • Assignee:
              Leonardo Uribe
              Reporter:
              Rey Dalisay
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development