I have a page (page1.xhtml) with a tabView and a dataTable within one of the tabs. The dataTableuses lazy loading and should provide multisort mode. 
Therefore I use a List<SortMeta> for the sortBy attribute of dataTable as found here (Initial sortorder for PrimeFaces datatable with multisort).
The List<SortMeta> is created in getPreSortOrder() but findComponent() for clientId "myForm:tabs:data:colName" always returns null! 
In another constellation (page2.xhtml) where I have the dataTable not in a tabView findComponent() always returns the correct column component!
So the problem seems to be the combination with tabView?!
Any hints welcome - Thank you!
page.xhtml:
<html>
<f:metadata>
  <f:viewAction action="#{model.loadData}"/>
</f:metadata>
<ui:composition template="/WEB-INF/template.xhtml">
  <ui:define name="content">
    <h:form id="myForm">
    <p:panelGrid>...</p:panelGrid>
      <p:tabView id="tabs">
        <p:tab id="tab1">...</p:tab>
        <p:tab id="tab2">...</p:tab>
        <p:tab id="tab3">
          <p:dataTable id="data" lazy="true" 
                       value="#{model.personTableModel}" var="item" 
                       sortMode="multiple" sortBy="#{model.tableMode.preSortOrder}">
            <p:column id="colName" sortBy="#{item.name}"> // <-- findComponent for "myForm:tabs:data:colName" always returns null !!!
              <h:outputText value="#{item.name}"/>
            </p:column>
            <p:column id="colAddress" sortBy="#{item.address}">
              <h:outputText value="#{item.address}"/>
            </p:column>
          </p:dataTable>
        </p:tab>
      </p:tabView>
    </h:form>
   </ui:define>
  </ui:composition>
</html>
page2.xhtml:
<html>
<f:metadata>
  <f:viewAction action="#{model.loadData}"/>
</f:metadata>
<ui:composition template="/WEB-INF/template.xhtml">
  <ui:define name="content">
    <h:form id="myForm">
    <p:panelGrid>...</p:panelGrid>
    <p:outputPanel id="tables">
      <p:fieldset>
        <p:dataTable id="data" lazy="true" 
                     value="#{model.personTableModel}" var="item" 
                     sortMode="multiple" sortBy="#{model.tableMode.preSortOrder}">
            <p:column id="colName" sortBy="#{item.name}"> // <-- findComponent for "myForm:data:colName" always component
              <h:outputText value="#{item.name}"/>
            </p:column>
            <p:column id="colAddress" sortBy="#{item.address}">
              <h:outputText value="#{item.address}"/>
            </p:column>
          </p:dataTable>
        <p:fieldset>
      </p:outputPanel>
    </h:form>
   </ui:define>
  </ui:composition>
</html>
Model.java:
@Named // javax.inject.Named
@ViewScoped // javax.faces.view.ViewScoped
public class Model implements Serializable {
  private static final String COL_NAME_CLIENT_ID = "myForm:tabs:data:colName";
  @Inject PersonTableDataModel personTableDataModel; // with getter & setter
  public void loadData() {
    List<SortMeta> preSortOrder = getPreSortOrder(COL_NAME_CLIENT_ID, "name", SortOrder.ASCENDING);
    personTableDataModel.setPreSortOrder(preSortOrder);
  }
  private List<SortMeta> getPreSortOrder(String columnId, String sortField, SortOrder sortOrder) {
    UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
    UIComponent column = viewRoot.findComponent(columnId); // <-- ALWAYS RETURNS NULL
    if (Objects.isNull(column)) {
      return Collections.emptyList();
    }
    List<SortMeta> preSortOrder = new ArrayList<>();
    SortMeta sm = new SortMeta();
    sm.setSortBy((UIColumn) column);
    sm.setSortField(sortField);
    sm.setSortOrder(sortOrder);
    preSortOrder.add(sm);
    return preSortOrder;
  }
}
PersonTableDataModel.java:
public class PersonTableDataModel extends TableModel<Person> {
}
TableModel.java:
public class TableModel<T> extends LazyDataModel<T> {
  private List<SortMeta> preSortOrder; // with getter & setter
}
I am using Primefaces 6.1 on Wildfly 10.0.0.Final
EDIT:
I added a TabChange event listener changeTab() and traversed the UIComponents and at the end the correct clientId is written to the output?!
Model.java:
public void changeTab(TabChangeEvent event) {
    TabView tabView = (TabView) event.getComponent();
    logger.entry(tabView.getActiveIndex());
    Tab tabProzesse = tabView.findTab("myForm:tabs:tab3");
    if (Objects.nonNull(tabProzesse)) {
        List<UIComponent> childs = tabProzesse.getChildren();
        Optional<UIComponent> c = childs.stream().filter(child -> child.getClientId().equals("myForm:tabs:data")).findFirst();
        if (c.isPresent() && c.get() instanceof DataTable) {
            DataTable t = (DataTable) c.get();
            Optional<UIColumn> optColName = t.getColumns().stream().filter(col -> col.getClientId().contains("colName")).findFirst();
            optColName.ifPresent(colName -> {
                logger.debugf("colName.clientId=%s", colName.getClientId()); // <-- output colName.clientId=myForm:tabs:data:colName
            });
        }
    }
}
