final TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
final ResourceManager resourceManager = ResourceManagerFactory.getResourceManager(facesContext);
final String contextPath = facesContext.getExternalContext().getRequestContextPath();
final String sheetId = sheet.getClientId(facesContext);
Measure sheetHeight;
if (style.getHeight() == null) {
// FIXME: nullpointer if height not defined
LOG.error("no height in parent container, setting to 100");
sheetHeight = Measure.valueOf(100);
} else {
sheetHeight = style.getHeight();
}
final Measure footerHeight = getFooterHeight(facesContext, sheet);
final Measure headerHeight = getHeaderHeight(facesContext, sheet);
final String selectable = sheet.getSelectable();
final Application application = facesContext.getApplication();
final SheetState state = sheet.getSheetState(facesContext);
final List<Integer> columnWidths = sheet.getWidthList();
final List<Integer> selectedRows = getSelectedRows(sheet, state);
final List<AbstractUIColumn> renderedColumnList = sheet.getRenderedColumns();
writer.startElement(HtmlElements.INPUT, null);
writer.writeIdAttribute(sheetId + WIDTHS_POSTFIX);
writer.writeNameAttribute(sheetId + WIDTHS_POSTFIX);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.HIDDEN, false);
writer.writeAttribute(HtmlAttributes.VALUE, StringUtils.joinWithSurroundingSeparator(columnWidths), false);
writer.endElement(HtmlElements.INPUT);
writer.startElement(HtmlElements.INPUT, null);
writer.writeIdAttribute(sheetId + SCROLL_POSTFIX);
writer.writeNameAttribute(sheetId + SCROLL_POSTFIX);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.HIDDEN, false);
Integer[] scrollPosition = sheet.getScrollPosition();
if (scrollPosition != null) {
String scroll = scrollPosition[0] + ";" + scrollPosition[1];
writer.writeAttribute(HtmlAttributes.VALUE, scroll, false);
} else {
writer.writeAttribute(HtmlAttributes.VALUE, "", false);
}
writer.endElement(HtmlElements.INPUT);
if (!UISheet.NONE.equals(selectable)) {
writer.startElement(HtmlElements.INPUT, null);
writer.writeIdAttribute(sheetId + SELECTED_POSTFIX);
writer.writeNameAttribute(sheetId + SELECTED_POSTFIX);
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.HIDDEN, false);
writer.writeAttribute(
HtmlAttributes.VALUE, StringUtils.joinWithSurroundingSeparator(selectedRows), true);
writer.endElement(HtmlElements.INPUT);
}
ExpandedState expandedState = null;
StringBuilder expandedValue = null;
if (sheet.isTreeModel()) {
expandedState = sheet.getExpandedState();
expandedValue = new StringBuilder(",");
}
final boolean showHeader = sheet.isShowHeader();
final boolean ie6SelectOneFix = showHeader
&& ClientProperties.getInstance(facesContext).getUserAgent().isMsie6()
&& ComponentUtils.findDescendant(sheet, UISelectOne.class) != null;
// BEGIN RENDER BODY CONTENT
Style bodyStyle = new Style();
/*
bodyStyle.setPosition(Position.RELATIVE);
*/
Measure tableBodyWidth = sheet.getCurrentWidth().subtractNotNegative(getContentBorder(facesContext, sheet));
bodyStyle.setWidth(tableBodyWidth);
if (sheet.isPagingVisible()) {
sheetHeight = sheetHeight.subtract(footerHeight);
}
if (ie6SelectOneFix) {
bodyStyle.setTop(headerHeight);
}
if (showHeader) {
sheetHeight = sheetHeight.subtract(headerHeight);
}
bodyStyle.setHeight(sheetHeight);
if (showHeader) {
renderColumnHeaders(
facesContext, sheet, writer, resourceManager, contextPath, sheetId, renderedColumnList, tableBodyWidth);
}
writer.startElement(HtmlElements.DIV, null);
writer.writeIdAttribute(sheetId + ComponentUtils.SUB_SEPARATOR + "data_div");
writer.writeClassAttribute(Classes.create(sheet, "body"));
/*
bodyStyle.setPaddingTop(ie6SelectOneFix ? Measure.ZERO : headerHeight);
*/
writer.writeStyleAttribute(bodyStyle);
bodyStyle.setHeight(null);
bodyStyle.setTop(null);
Style sheetBodyStyle = new Style(bodyStyle);
// is null, in AJAX case.
if (sheet.getNeedVerticalScrollbar() == Boolean.TRUE) {
tableBodyWidth = tableBodyWidth.subtractNotNegative(getVerticalScrollbarWeight(facesContext, sheet));
}
sheetBodyStyle.setWidth(tableBodyWidth);
writer.startElement(HtmlElements.TABLE, null);
writer.writeAttribute(HtmlAttributes.CELLSPACING, "0", false);