I'm using UIColumns (myfaces-1.0.9), and I've hit what appears to be a bug. I can initialize my page, and then update my page, but I get an IllegalArgumentException("row is unavailable") exception when the page is being rendered (but after all of the actions for that page have been processed).
The problem appears to be in here: HtmlTableRendererBase.encodeChildren() contains: columns.setRowIndex(k); String columnStyle = styles.getColumnStyle(j); renderColumnBody(facesContext, writer, uiData, child, columnStyle); k starts out as 0. renderColumnBody() eventually calls UIColumns(UIData).isAllChildrenAndFacetsValid() line: 646 UIColumns(UIData).encodeBegin(FacesContext) line: 594 RendererUtils.renderChild(FacesContext, UIComponent) line: 482 HtmlTableRenderer(HtmlTableRendererBase).renderColumnBody(FacesContext, ResponseWriter, UIData, UIComponent, String) line: 205 and isAllChildrenAndFacetsValid cycles through the rowIndexes, and ends up setting it to -1. And then sometime later my own code gets called via HtmlSelectBooleanCheckbox(UIOutput).getValue() line: 75 RendererUtils.getBooleanValue(UIComponent) line: 213 HtmlCheckboxRenderer(HtmlCheckboxRendererBase).encodeEnd(FacesContext, UIComponent) line: 94 HtmlSelectBooleanCheckbox(UIComponentBase).encodeEnd(FacesContext) line: 341 RendererUtils.renderChild(FacesContext, UIComponent) line: 491 RendererUtils.renderChildren(FacesContext, UIComponent) line: 468 RendererUtils.renderChild(FacesContext, UIComponent) line: 489 HtmlTableRenderer(HtmlTableRendererBase).renderColumnBody(FacesContext, ResponseWriter, UIData, UIComponent, String) line: 205 but by this point, the rowIndex is -1 rather than the original 0 value it should have been. I'm not sure what to suggest as a fix. Maybe override isAllChildrenAndFacetsValid() at UIColumns, store the current row-index, call super.isAllChildrenAndFacetsValid(), and then restore the row-index? I'll go ahead and open this as a Jira issue if someone confirms this is really a bug. Thanks. -Mike