Hi,
Please review the following API proposal for adding component tracking
ability to RequestContext
[TRINIDAD] [API] [TRINIDAD-2398] add component tracking ability to
RequestContext
https://issues.apache.org/jira/browse/TRINIDAD-2398
Requirement:
There are cases where we need to know which component is under
processing. This can be achieved if we maintain component stack in
RequestContext and provide API to push/pop/peek the component stack.
Components are pushed/popped when they are decoded, validated, rendered,
visited, etc.
For performance reason, we would like to have VisitContext keep a
reference to the current RequestContext.
New API Proposed:
3 new methods added to RequestContext for component tracking ability.
Default implementation is to do nothing. The methods are not abstract
for backward compatibility reason.
/**
* Push the component onto the stack so we know the current component
being processed.
* @param context the FacesContext for the current request
* @param component an UIComponent object to be pushed as current
component.
* @exception NullPointerException if <code>component</code> is null.
* @see popCurrentComponent(FacesContext, UIComponent) and
getCurrentComponent()
*/
public void pushCurrentComponent(FacesContext context, UIComponent
component)
{
return;
}
/**
* Pop the component out from the stack.
* @param context the FacesContext for the current request
* @param component an UIComponent object to be poped.
* @exception IllegalStateException if <code>component</code> is not
the same
* as the current top component in the component stack.
* @see pushCurrentComponent(FacesContext, UIComponent) and
getCurrentComponent() */
public void popCurrentComponent(FacesContext context, UIComponent
component)
{
return;
}
/**
* Returns the current component being processed.
* @see pushCurrentComponent(FacesContext, UIComponent) and
popCurrentComponent(FacesContext, UIComponent)
*/
public UIComponent getCurrentComponent()
{
return null;
}
2. New method added to VisitContext to retrieve RequestContext instance.
Subclasses can hold a reference to the current RequestContext instance
and return that reference.
/**
* <p>Returns the RequsetContext instance for the current request.</p>
*/
public RequestContext getRequestContext()
{
return RequestContext.getCurrentInstance();
}
Thanks,
Jing