[ 
https://issues.apache.org/jira/browse/MYFACES-3702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17157295#comment-17157295
 ] 

Thomas Andraschko edited comment on MYFACES-3702 at 7/14/20, 11:41 AM:
-----------------------------------------------------------------------

It seems that Mojarra (both UIData and UIRepeat) resets always the DataModel. 
Based on Validation-State and Error-FacesMessages, it resets the row state.

In MyFaces, both states are resetted based on Validation-State and 
Error-FacesMessages.

Before chain anything here, we should make some integration tests for the other 
already fixed issues.



was (Author: tandraschko):
It seems that Mojarra (both UIData and UIRepeat) resets always the DataModel. 
Based on Validation-State and Error-FacesMessages, it resets the row state.

In MyFaces, both states are resetted based on Validation-State and 
Error-FacesMessages


> ui:repeat is caching its data model if error occurs 
> ----------------------------------------------------
>
>                 Key: MYFACES-3702
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3702
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.10
>            Reporter: dennis hoersch
>            Priority: Major
>
> 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[] {});
> }



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to