[ http://issues.apache.org/jira/browse/TOMAHAWK-498?page=all ]
Martin Marinschek resolved TOMAHAWK-498.
----------------------------------------
Fix Version/s: 1.1.4-SNAPSHOT
Resolution: Fixed
Assignee: Martin Marinschek
Thanks to Val Blant.
> detailStamp facet is decoded improperly if not all rows render the same
> components
> ----------------------------------------------------------------------------------
>
> Key: TOMAHAWK-498
> URL: http://issues.apache.org/jira/browse/TOMAHAWK-498
> Project: MyFaces Tomahawk
> Issue Type: Bug
> Affects Versions: 1.1.2
> Reporter: Val Blant
> Assigned To: Martin Marinschek
> Fix For: 1.1.4-SNAPSHOT
>
>
> If the detailStamp facet contains some input fields which are conditionally
> rendered, the fields which are not rendered in at least one row will cause
> the rest of the rows to render incorrect values in the facet. Please read the
> comments below for more detail.
> This can be fixed by adding the code below to HtmlDataTable.processDetails()
> method right before the call to
> "process(context,facet,processAction);"
> // If we are in the decode phase, the values restored into
> our
> // facet in setRowIndex() may be incorrect. This will happen
> // if some input fields are rendered in some rows, but not
> // rendered in others. In this case the input field
> components
> // will still contain the _submittedValue from the previous
> row
> // that had that input field and _submittedValue will not
> be set to
> // null by the process() method if there was no value
> submitted.
> // Thus, an invalid component state for that row will be
> saved in
> // _detailRowStates. The validation phase will not put a
> null into
> // _sumbittedValue either, b/c the component is not
> rendered, so
> // validation code doesn't run. This erroneous value will
> propagate all the way
> // to the render phase, and result in all rows on the
> current page being
> // rendered with the "stuck" _submittedValue, rather than
> evaluating the
> // value to render for every row.
> //
> // We can fix this by initializing _submittedValue of all
> input fields in the facet
> // to null before calling the process() method below during
> the decode phase.
> //
> if ( PROCESS_DECODES == processAction ) {
> resetAllSubmittedValues(facet);
> }
> private void resetAllSubmittedValues(UIComponent component) {
> if ( component instanceof UIInput ) {
> ((UIInput)component).setSubmittedValue(null);
> }
> for (Iterator it = component.getFacetsAndChildren(); it.hasNext();
> ) {
> resetAllSubmittedValues((UIComponent)it.next());
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira