I did a little testing and had the same issue as you.
I got a little help from this page:
http://www.icefaces.org/JForum/posts/list/6760.page;jsessionid=C1870B4FADF8F7EB0DF4CB747BAD09AB
Try this instead of the other findComponent I posted:
view.findComponent( clientId.replace( view.getClientId( facesContext ), '' ).replace( /\:\d*\:/g, ':' ) );
To test, I wrote a very simple custom control that shows the error messages similar to what you wanted. It also generates a link on the error message. When the error message is clicked, the field with the error gets focus.
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.beforeRenderResponse><![CDATA[#{javascript:var messageObjects = [];
var clientId, clientIds = facesContext.getClientIdsWithMessages();
while( clientIds.hasNext() ){
clientId = clientIds.next();
var component = view.findComponent( clientId.replace( view.getClientId( facesContext ), '' ).replace( /\:\d*\:/g, ':' ) );
if( !component ){ continue; }
var message = '', messages = facesContext.getMessages( clientId );
while( messages.hasNext() ){
message += (message) ? ', ' : '' + messages.next().getSummary();
}
var labelComponent = getLabelFor( component );
var label = ( labelComponent ) ? labelComponent.getValue() : '';
messageObjects.push({
clientId: clientId,
label: label,
message: message
});
}
viewScope.messageObjects = messageObjects;}]]></xp:this.beforeRenderResponse>
<xp:this.resources>
<xp:script src="/UtilitiesSSJS.jss" clientSide="false"></xp:script>
</xp:this.resources>
<xp:div styleClass="xspMessage"
rendered="#{javascript:return ( getComponent( 'messageRepeat' ).getRowCount() > 0 );}">
<xp:repeat id="messageRepeat" rows="30" value="#{viewScope.messageObjects}" var="messageObject">
<xp:this.facets>
<xp:text value="Validation errors:" xp:key="header" tagName="strong" />
</xp:this.facets>
<br />
<a href="#" onclick="dojo.byId('#{messageObject.clientId}').focus();return false;">
<xp:text value="#{messageObject.label} #{messageObject.message}" />
</a>
</xp:repeat>
</xp:div>
</xp:view>