docs: protected void startTable(FacesContext facesContext, UIComponent uiComponent) throws IOException
      {
          ResponseWriter writer = facesContext.getResponseWriter();
          writer.startElement(HTML.TABLE_ELEM, uiComponent);
          
          Map<String, List<ClientBehavior>> behaviors = null;
          if (uiComponent instanceof ClientBehaviorHolder)
          {
              behaviors = ((ClientBehaviorHolder) uiComponent).getClientBehaviors();
              if (!behaviors.isEmpty())
              {
                  HtmlRendererUtils.writeIdAndName(writer, uiComponent, facesContext);
              }
              else
              {
                  HtmlRendererUtils.writeIdIfNecessary(writer, uiComponent, facesContext);
              }
              if (behaviors.isEmpty() && isCommonPropertiesOptimizationEnabled(facesContext))
              {
                  CommonPropertyUtils.renderEventProperties(writer, 
                          CommonPropertyUtils.getCommonPropertiesMarked(uiComponent), uiComponent);
              }
              else
              {
                  if (isCommonEventsOptimizationEnabled(facesContext))
                  {
                      CommonEventUtils.renderBehaviorizedEventHandlers(facesContext, writer, 
                             CommonPropertyUtils.getCommonPropertiesMarked(uiComponent),
                             CommonEventUtils.getCommonEventsMarked(uiComponent), uiComponent, behaviors);
                  }
                  else
                  {
                      HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, uiComponent, behaviors);
                  }
              }
              if (isCommonPropertiesOptimizationEnabled(facesContext))
              {
                  HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.TABLE_ATTRIBUTES);
                  CommonPropertyUtils.renderCommonPassthroughPropertiesWithoutEvents(writer, 
                          CommonPropertyUtils.getCommonPropertiesMarked(uiComponent), uiComponent);
              }
              else
              {
                  HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, 
                          HTML.TABLE_PASSTHROUGH_ATTRIBUTES_WITHOUT_EVENTS);
              }
          }
          else
          {
              HtmlRendererUtils.writeIdIfNecessary(writer, uiComponent, facesContext);
              if (isCommonPropertiesOptimizationEnabled(facesContext))
              {
                  HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.TABLE_ATTRIBUTES);
                  CommonPropertyUtils.renderCommonPassthroughProperties(writer, 
                          CommonPropertyUtils.getCommonPropertiesMarked(uiComponent), uiComponent);
              }
              else
              {
                  HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, 
                          HTML.TABLE_PASSTHROUGH_ATTRIBUTES);
              }
          }
      }