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

ui:repeat is caching its data model if error occurs

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.1.10
    • None
    • None
    • None

    Description

      ui:repeat caches its data model. Usually it it is cleared before rendering. But not if there are any errors in faces context.

      Why is it not cleared then?

      That causes a problem in the following scenario:

      We have an ui:repeat that iterating over a list of more detailed error messages of an object on the page. This list is empty in the start of an request. While invoking an action on the page error messages are added to the faces context to be shown on the page. Additionally some more detailed information is stored to be shown directly with that object.

      But they won't appear because the empty list is cached in the ui:repeat's data model.

      I could reproduce it with the following more general example: The first button creates an info message which will be shown by the ui:repeat. The second button creates an error message and nothing is rendered through the ui:repeat.

      Testpage.xhtml

      <his:form id="testForm">
      <h:commandButton value="Create info message" action="#

      {testController.createInfoMessage()}

      " />
      <h:commandButton value="Create error message" action="#

      {testController.createErrorMessage()}

      " />
      <br/>

      UI:Repeat:
      <ui:repeat var="item" value="#

      {facesContext.getMessageList()}

      ">
      FacesMessage #

      {item.severity}

      // #

      {item.summary}

      </ui:repreat>|<br/>

      Has Messages: #

      {not empty facesContext.getMessageList()}

      |
      </his:form>

      TestController

      public void createErrorMessage() {
      MessageUtils.addMessage(FacesMessage.SEVERITY_ERROR, "Oh no, an error!", new Object[] {});
      }

      public void createInfoMessage() {
      MessageUtils.addMessage(FacesMessage.SEVERITY_INFO, "Just an information.", new Object[] {});
      }

      Attachments

        Activity

          People

            Unassigned Unassigned
            hoersch dennis hoersch
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated: