Thomas Andraschko created MYFACES-4774:
------------------------------------------

             Summary: UIData/UIRepeat lose per-row input state on a later 
re-render with errors
                 Key: MYFACES-4774
                 URL: https://issues.apache.org/jira/browse/MYFACES-4774
             Project: MyFaces Core
          Issue Type: Bug
            Reporter: Thomas Andraschko


Per the UIData.encodeBegin() javadoc, saved per-row state of child inputs must 
be discarded “unless it is needed to rerender the current page with errors”. It 
includes submittedValue, localValue, localValueSet and valid.

MyFaces does keep this state (_rowStates) within the request in which 
validation failed. But UIData.saveState() and UIRepeat.saveState() leave 
_rowStates out when they run in RENDER_RESPONSE, which is when the view state 
is written. So it is lost for the next request. This has been the case since 
MYFACES-4048.

Example: a validation error is followed by an ajax request that re-renders the 
table with ERROR or FATAL messages but doesn’t execute it. The row inputs then 
show the model values instead of the values the user typed. Mojarra keeps the 
typed values here, and the Faces 5.0 TCK is going to test for this.

Fix: also save _rowStates in RENDER_RESPONSE. encodeBegin() already clears it 
when there are no ERROR/FATAL messages, so it is empty in the normal case and 
doesn’t make the view state bigger. _rowTransientStates stays request-scoped.

Mojarra counterpart and reproducer: eclipse-ee4j/mojarra#6110 (see 
eclipse-ee4j/mojarra#6110 (Kommentar))



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to