Author: awiner
Date: Fri Sep 15 14:50:04 2006
New Revision: 446748

URL: http://svn.apache.org/viewvc?view=rev&rev=446748
Log:
Check in patch for ADFFACES-176:  UIXCollection token cache - Intenal Oracle 
Bugfix Needs to be backported to Trinidad.  The problem in the original code 
was that clearing the token cache on every encode was too aggressive, 
especially in the face of PPR requests that don't update the table (and 
therefore leave all the IDs in the content as they were).  So, instead, clear 
the token cache only on requests where we're delivering a RowChangeEvent.  This 
itself isn't perfect, but it's a big improvement.

Modified:
    
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTableTemplate.java
    
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java

Modified: 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTableTemplate.java
URL: 
http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTableTemplate.java?view=diff&rev=446748&r1=446747&r2=446748
==============================================================================
--- 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTableTemplate.java
 (original)
+++ 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/UIXTableTemplate.java
 Fri Sep 15 14:50:04 2006
@@ -98,7 +98,9 @@
         //pu: Implicitly record a Change for 'showAll' attribute
         addAttributeChange("showAll", Boolean.FALSE);
       }
-
+      // since the range is now different we can clear the currency cache:
+      clearCurrencyStringCache();
+      
       __broadcast(event, getRangeChangeListener());
     }
     else if (event instanceof RowDisclosureEvent)

Modified: 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java?view=diff&rev=446748&r1=446747&r2=446748
==============================================================================
--- 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
 (original)
+++ 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
 Fri Sep 15 14:50:04 2006
@@ -441,6 +441,16 @@
   }
 
   /**
+   * Clear the rowKey-to-currencyString cache.
+   * The cache is not cleared immediately; instead it will be cleared
+   * when [EMAIL PROTECTED] #encodeBegin} is called.
+   */
+  protected void clearCurrencyStringCache()
+  {
+    _getInternalState(true)._clearTokenCache = true;
+  }
+
+  /**
    * Clears all the currency strings.
    */
   @Override
@@ -448,7 +458,14 @@
   {
     _init();
 
-    _getCurrencyCache().clear();
+    InternalState istate = _getInternalState(true);
+    // we must not clear the currency cache everytime. only clear
+    // it in response to specific events: bug 4773659
+    if (istate._clearTokenCache)
+    {
+      istate._clearTokenCache = false;
+      _getCurrencyCache().clear();
+    }
     _flushCachedModel();
 
     Object assertKey = null;
@@ -1165,6 +1182,7 @@
     private transient Object _value = null;
     private transient CollectionModel _model = null;
     private transient Object _currentRowKey = _NULL;
+    private transient boolean _clearTokenCache = false;
     // this is true if this is the first request for this viewID and 
processDecodes
     // was not called:
     private transient boolean _isFirstRender = true;


Reply via email to