You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Martin Marinschek (JIRA)" <de...@myfaces.apache.org> on 2006/09/19 07:41:25 UTC

[jira] Resolved: (TOMAHAWK-498) detailStamp facet is decoded improperly if not all rows render the same components

     [ 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