I was able to get the proxy to finally work but it will likely need the component team to have a look and potentially come up with the correct fix.
Currently the TabSetProxy extends TabSetProxyBase which is a generated class. It generates code to handle the getFor and setFor methods. In this case it using fairly boilerplate code to store the value of the for attribute and look it up again. Unfortunately, this doesn't take into consideration that the base id in the markup won't necessarily be the same as the client id that ends up getting rendered. This is especially true for portlets which are namespaced within a UIViewRoot. This is discussed in previous comments in the case.
What I ended up doing was overriding the getFor method in TabSetProxy to the following:
@Override
public String getFor() {
//Get the originally stored value
String forComponentId = super.getFor();
//Proceed to find the component that it belongs to using one of our existing find methods
UIViewRoot root = getFacesContext().getViewRoot();
UIComponent forComponent = CoreComponentUtils.findComponentInView(root, forComponentId);
if( forComponent != null )
{
//Get the client id of the found component and use that
forComponentId = forComponent.getClientId();
}
return forComponentId;
}
Assuming the component can be reliably found this way, the resulting hidden inputText value now matches the actual id of the tabset:
<input id="A6150:myTabSet_tsc" name="A6150:myTabSet_tsc" type="hidden">
Clicking on the tab actually results in a script being executed:
<em id="A6150:confirmLbl" onclick="if(ice.ace.util.isEventSourceInputElement(event)) event.cancelBubble = true;">Confirmation</em>
which can now match up the id of the hidden input with the id of the tabset (which it couldn't do before and was causing the problem).
I imagine that we have a similar issue with any of our components that use the same boilerplate code for their "for" attribute in that if they don't actually do a search and return the client id, something may not work correctly.
This is still not working but now at least logs a warning which may provide a clue:
1-Jun-2012 10:59:44 PM org.apache.myfaces.renderkit.html.HtmlLabelRenderer encodeBegin
WARNING: Attribute 'for' of label component with id jpfcpncuivr_A6150_j_id0:proxyForm:_7_d is not defined