UIXCollection token cache - Intenal Oracle Bugfix Needs to be backported to
Trinidad
------------------------------------------------------------------------------------
Key: ADFFACES-176
URL: http://issues.apache.org/jira/browse/ADFFACES-176
Project: MyFaces ADF-Faces
Issue Type: Bug
Reporter: Max Starets
Priority: Critical
In UIXCollection.java:
Replace the following code:
/**
* Clears all the currency strings.
*/
@Override
public final void encodeBegin(FacesContext context) throws IOException
{
_init();
_getCurrencyCache().clear();
_flushCachedModel();
Object assertKey = null;
assert ((assertKey = getRowKey()) != null) || true;
__encodeBegin(context);
// make sure that the rendering code preserves the currency:
assert _assertKeyPreserved(assertKey) : "CurrencyKey not preserved";
}
with:
/**
* 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
public final void encodeBegin(FacesContext context) throws IOException
{
_init();
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;
assert ((assertKey = getRowKey()) != null) || true;
__encodeBegin(context);
// make sure that the rendering code preserves the currency:
assert _assertKeyPreserved(assertKey) : "CurrencyKey not preserved";
}
In the inner InternalState class add the following member variable:
private transient boolean _clearTokenCache = false;
In UIXTableTemplate.java replace the following method:
/**
* Delivers an event to the appropriate listeners.
* @param event
* @throws javax.faces.event.AbortProcessingException
*/
@Override
public void broadcast(FacesEvent event)
throws AbortProcessingException
{
// the order of processing is
// 1. do any default action handling
// 2. invoke any actionListener method binding
// 3. call all the registered ActionListener instances.
// Deliver to the default RangeChangeListener
if (event instanceof RangeChangeEvent)
{
RangeChangeEvent rEvent = (RangeChangeEvent) event;
int first = rEvent.getNewStart();
setFirst(first);
//pu: Implicitly record a Change for 'first' attribute
addAttributeChange("first", new Integer(first));
if ((first == 0) && (rEvent.getNewEnd() == getRowCount()))
{
setShowAll(true);
//pu: Implicitly record a Change for 'showAll' attribute
addAttributeChange("showAll", Boolean.TRUE);
}
else if (isShowAll())
{
setShowAll(false);
//pu: Implicitly record a Change for 'showAll' attribute
addAttributeChange("showAll", Boolean.FALSE);
}
__broadcast(event, getRangeChangeListener());
}
else if (event instanceof RowDisclosureEvent)
{
RowDisclosureEvent eEvent = (RowDisclosureEvent) event;
RowKeySet set = getDisclosedRowKeys();
set.addAll(eEvent.getAddedSet());
set.removeAll(eEvent.getRemovedSet());
__broadcast(event, getRowDisclosureListener());
}
else if (event instanceof SortEvent)
{
SortEvent sEvent = (SortEvent) event;
setSortCriteria(sEvent.getSortCriteria());
__broadcast(event, getSortListener());
}
else if (event instanceof SelectionEvent)
{
//pu: Implicitly record a Change for 'selectionState' attribute
addAttributeChange("selectedRowKeys",
getSelectedRowKeys());
__broadcast(event, getSelectionListener());
}
super.broadcast(event);
}
with:
/**
* Delivers an event to the appropriate listeners.
* @param event
* @throws javax.faces.event.AbortProcessingException
*/
@Override
public void broadcast(FacesEvent event)
throws AbortProcessingException
{
// the order of processing is
// 1. do any default action handling
// 2. invoke any actionListener method binding
// 3. call all the registered ActionListener instances.
// Deliver to the default RangeChangeListener
if (event instanceof RangeChangeEvent)
{
RangeChangeEvent rEvent = (RangeChangeEvent) event;
int first = rEvent.getNewStart();
setFirst(first);
//pu: Implicitly record a Change for 'first' attribute
addAttributeChange("first", new Integer(first));
if ((first == 0) && (rEvent.getNewEnd() == getRowCount()))
{
setShowAll(true);
//pu: Implicitly record a Change for 'showAll' attribute
addAttributeChange("showAll", Boolean.TRUE);
}
else if (isShowAll())
{
setShowAll(false);
//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)
{
RowDisclosureEvent eEvent = (RowDisclosureEvent) event;
RowKeySet set = getDisclosedRowKeys();
set.addAll(eEvent.getAddedSet());
set.removeAll(eEvent.getRemovedSet());
__broadcast(event, getRowDisclosureListener());
}
else if (event instanceof SortEvent)
{
SortEvent sEvent = (SortEvent) event;
setSortCriteria(sEvent.getSortCriteria());
__broadcast(event, getSortListener());
}
else if (event instanceof SelectionEvent)
{
//pu: Implicitly record a Change for 'selectionState' attribute
addAttributeChange("selectedRowKeys",
getSelectedRowKeys());
__broadcast(event, getSelectionListener());
}
super.broadcast(event);
}
--
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